{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "7532a2f9",
   "metadata": {},
   "source": [
    "### 自动求导"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d51023c5",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0., 1., 2., 3.])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对y = x.Tx关于列向量x求导\n",
    "import torch\n",
    "\n",
    "x = torch.arange(4.0)\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "d8640257",
   "metadata": {},
   "outputs": [],
   "source": [
    "#存储梯度\n",
    "x.requires_grad_(True)#等价于x = torch.arange(4.0,requires_grad=True)\n",
    "x.grad#默认值是None"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4acb29fd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(14., grad_fn=<DotBackward0>)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = torch.dot(x,x)\n",
    "y\n",
    "#PyTorch隐式地构造计算图，grad_fn用于记录梯度计算"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "48c06c84",
   "metadata": {},
   "source": [
    "##### 通过调用反向传播函数来自动计算y关于x每个分量的梯度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "42059f93",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0., 2., 4., 6.])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y.backward()\n",
    "x.grad"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "c676a11c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([True, True, True, True])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.grad==2*x#验证"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "0858c7ae",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([1., 1., 1., 1.])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 在默认情况下，PyTorch会累积梯度，我们需要清除之前的值\n",
    "x.grad.zero_()#如果没有这一步结果就会加累上之前的梯度值，变为[1,5,9,13]\n",
    "y = x.sum()\n",
    "y.backward()\n",
    "x.grad"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "d2658dec",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0., 2., 4., 6.])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.grad.zero_()\n",
    "y=x*x#哈达玛积，对应元素相乘\n",
    "\n",
    "#在深度学习中我们一般不计算微分矩阵\n",
    "#而是计算批量中每个样本单独计算的偏导数之和\n",
    "\n",
    "y.sum().backward()#等价于y.backword(torch.ones(len(x)))\n",
    "x.grad"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f75207f6",
   "metadata": {},
   "source": [
    "##### 将某些计算移动到记录的计算图之外"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "c05cc7da",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([True, True, True, True])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 后可用于用于将神经网络的一些参数固定住\n",
    "x.grad.zero_()\n",
    "y = x*x\n",
    "u = y.detach()#把y当作常数\n",
    "z = u*x\n",
    "\n",
    "z.sum().backward()\n",
    "x.grad == u"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "fedc7db6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([True, True, True, True])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.grad.zero_()\n",
    "y.sum().backward()\n",
    "x.grad == 2*x"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0e6f363b",
   "metadata": {},
   "source": [
    "##### 即使构建函数的计算图需要用过Python控制流，仍然可以计算得到的变量的梯度\n",
    "##### 这也是隐式构造的优势，因为它会存储梯度计算的计算图，再次计算时执行反向过程就可以"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "32abbe77",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(True)"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def f(a):\n",
    "    b = a * 2\n",
    "    while b.norm()<1000:\n",
    "        b = b * 2\n",
    "    if b.sum() > 0:\n",
    "        c = b\n",
    "    else:\n",
    "        c = 100 * b\n",
    "    return c\n",
    "\n",
    "a = torch.randn(size=(),requires_grad=True)\n",
    "d = f(a)\n",
    "d.backward()\n",
    "\n",
    "a.grad == d / a"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "19abf488",
   "metadata": {},
   "source": [
    "## 练习"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "34e6b5b0",
   "metadata": {},
   "source": [
    "###### 1.为什么计算二阶导数比一阶导数的开销要更大？\n",
    "\n",
    "二阶导数是在一阶导数的基础上进行的，开销自然更大\n",
    "\n",
    "###### 2.在运行反向传播函数之后，立即再次运行它，看看会发生什么。\n",
    "\n",
    "\"RuntimeError: Trying to backward through the graph a second time (or directly access saved tensors after they have already been freed). Saved intermediate values of the graph are freed when you call .backward() or autograd.grad(). Specify retain_graph=True if you need to backward through the graph a second time or if you need to access saved tensors after calling backward.\"\n",
    "\n",
    "说明不能连续两次运行,pytorch使用的是动态计算图,反向传播函数运行一次后计算图就被释放了\n",
    "\n",
    "###### 只需要在函数接口将参数retain_graph设为True即可"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "5fbc86ca",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(4096.)"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def f(a):\n",
    "    b = a * 2\n",
    "    while b.norm()<1000:\n",
    "        b = b * 2\n",
    "    if b.sum() > 0:\n",
    "        c = b\n",
    "    else:\n",
    "        c = 100 * b\n",
    "    return c\n",
    "a.grad.zero_()\n",
    "a = torch.randn(size=(),requires_grad=True)#size=0表示a是标量\n",
    "d = f(a)\n",
    "#d.backward(retain_graph=True)\n",
    "#a.grad\n",
    "d.backward()\n",
    "a.grad"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9a4d9fb7",
   "metadata": {},
   "source": [
    "###### 3.在控制流的例子中，我们计算d关于a的导数，如果我们将变量a更改为随机向量或矩阵，会发生什么？此时，计算结果f(a)不再是标量。结果会发生什么？我们如何分析这个结果？\n",
    "\n",
    "backward函数的机制本身不允许张量对张量求导，如果输入是向量或矩阵，需要将其在各个分量上求和，变为标量；所以还需要传入一个与输入同型的张量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "18a2f050",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([51200., 51200., 51200., 51200., 51200., 51200., 51200., 51200., 51200.,\n",
       "        51200.])"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def f(a):\n",
    "    b = a * 2\n",
    "    while b.norm()<1000:\n",
    "        b = b * 2\n",
    "    if b.sum() > 0:\n",
    "        c = b\n",
    "    else:\n",
    "        c = 100 * b\n",
    "    return c\n",
    "a.grad.zero_()\n",
    "a = torch.randn(10,requires_grad=True)\n",
    "d = f(a)\n",
    "#d.backward(retain_graph=True)\n",
    "#a.grad\n",
    "#d.backward()#RuntimeError: grad can be implicitly created only for scalar outputs\n",
    "d.sum().backward()#需要加上.sum()否则会报错 \n",
    "a.grad"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dd3fb9ce",
   "metadata": {},
   "source": [
    "###### 4.重新设计一个求控制流梯度的例子。运行并分析结果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "8ed6ca7d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(-3311.5398)"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def h(x):\n",
    "    y = x * x\n",
    "    while y.norm() < 2500:\n",
    "        y = y * 2\n",
    "    if y.sum() < 0:\n",
    "        c = 100*y\n",
    "    else:\n",
    "        c = y\n",
    "    return c\n",
    "x.grad.zero_()\n",
    "x = torch.randn(size=(),requires_grad=True)\n",
    "y = h(x)\n",
    "y.backward()\n",
    "x.grad"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "90465db8",
   "metadata": {},
   "source": [
    "###### 5.使f(x)=sin(x)，绘制f(x)和df(x)/dx的图像，其中后者不使用f'(x)=\\cos(x)。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "4adcde65",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1d627d00280>"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAACD3UlEQVR4nO29d5xkSXXv+Y30laa8aVPtZqbHO2Z6Bu8HKwQMQhIgg94DIbTSE5JWTyDpLUZaPgta7eM9vdVKAjHSICENRpgRDCBggMGN6fF+2ndXdZfLcult7B9xb1ZWVZqIm/dm9ajy9/nUp6puRladioo4v3NOnHNCSCnpoYceeuhh+8K31QL00EMPPfSwtegRQQ899NDDNkePCHrooYcetjl6RNBDDz30sM3RI4Ieeuihh22OwFYL4ASjo6Ny//79Wy1GDz300MOzCvfff/+ClHJs4/NnJRHs37+fw4cPb7UYPfTQQw/PKgghTjV63gsN9dBDDz1sc/SIoIceeuhhm6NHBD300EMP2xw9Iuihhx562OboEUEPPfTQwzaHK0QghLhFCDEnhHisyetCCPGXQoijQohHhBDX1b32TiHEEevjnW7I00MPPfTQgz7c8gj+AXhti9dfBxy0Pt4D/DWAEGIY+BDwXOBG4ENCiCGXZOqhhx566EEDrhCBlPIuYLHFkDcBn5EKdwODQoidwGuAb0spF6WUS8C3aU0o3qJcgMf+Fc7cqze8UuVf7j3No1MrHgumiVIOHvk8nHtEa3ihXOGz95zi6ZmUx4JpopiBez8FC0e0hmcKZT57zymOzqU9FkwT+VW4529h+bTW8MVMkS/eP8WZxazHgmkis6Dmf2Vaa/jcap7PHz7DuZWcx4JpYmUKHvwspGa1hk8tZfnC4TMspAseC6aJ5DF46J8h20qVeoNuFZTtBs7UfT9lPWv2fBOEEO9BeRPs3bvXGym//vvw4D+B8MGvfBkueFnL4b//+Ye5/eGzAPzLrz+P51844o1cOpASvvif4ek7QPjh178Lu57TYrjk3bce5odHFvD7BF/+317A1ZOD3ZN3I6pV+Me3wJm7wR+G3/wxjB5sMVzyS393Dw+dWSYW8vOV33ohBycSXRR4Ayol+PSrYf5JuPP/hN/8CQzuaTq8WK7y9k/ezdOzKUbjIb7yWy9kcijaRYE3CpSFT71ckdhdfwHv/SHEx5sOX82XeOvf/JTTi1l2D/bxb//lRQzHQl0UeAOyi/CpV0B6FkYugnd/F/oGmw6fXc3zc3/9E2ZXC1wwFuOO33kxkaC/e/JuxPJp+LtXQm4Jdl4L//lbEIx07dc/aw6LpZSflFIeklIeGhvbVCHdOc49okjg2l+Cof3wjQ8o5doEj02vcPvDZ/nV5+9jcqiPj/zb42zpJT+nfqxI4Mb3QGxMyd8CPzq6wA+PLPDel17IYF+Qj3/zqS4J2gRPf12RwEvfD4EwfPuDLYff/vBZHjqzzPteqcjif915tBtSNsdDn1Uk8OqPQjkPd/15y+GfvecUT8+m+N2bDrKaK/PJu453SdAmuPuvlDK66SNKmd791y2H3/KjE5xZyvJ7N13MuZUcn/7RFst/119ANgkv+2NIHoUHbm05/FN3HSeZLvK+Vx7k+HyGv//xye7I2Qw/+LiKSLz4f4dzD8HD/9zVX98tIpgG6s2jSetZs+fdxwOfUZboaz4KL/gdtamn7286/DM/PUks5Od/f/Ul/ObLLuSpmRRPnFvtosAbcO+noG8IXvWn8LzfVEp1sfnm/OzdpxlLhPm9Vx3kXS8+wI+PJrc2RHHvp2BwH7zkD+GGd8Mz31Shiib4wv1nODAa432vPMgvPW8fX3vk7Na6+If/HnZcDc//LXjOL6sQXTHTdPi/PjDF1ZMD/O5NF/Oz1+zii/dPkSmUuyhwHaRUIZUDL4UX/S5c9rNw+Bbl5TRAtSr5wuEpXnjhKO+76SAvv2ScLxyeolSpdlduG5USPPI5uOT18LL3w74Xwn1/19SQy5cqfOH+KV5z5Q5+71UXc2jfEP/6wNTWGXKFFDz2Zbjy5+AV/weMXw4P/GNXRegWEdwO/KqVPfQ8YEVKeQ74FvBqIcSQdUj8autZdyElPPEVuPT1Sple+XPgD8HjX244vFqV3PnUHK+8bIKBviCvu3Infp/ga4+c667cNspFOPJtuOJmCPbBVT8PCHXe0QD5UoW7jszz6ssnCAf8vOGqXQB86/GZLgpdL9CK8miufAv4A+qzrMKT/9ZweDJd4O7ji/zMVTvx+QRvvGYXVQnff3q+y4JbWJlSVtyVbwEh1P+hnIdjdzYcfnw+zWPTq7zpWhUF/bnrd5MtVvjpsWQXha7DzCOwdELJD2r95JfhzD0Nhz88tcz0co6fu17J/9brJ5lLFbj/1FKXBN6AE3dBdgGu/gX1/bXvUN7N7OMNh99zYpGVXIm3XjcJwM3X7eboXJqntuqs7Mi3oZRR0QghlPxnH4Clhm2BPIFb6aP/AvwUuEQIMSWEeJcQ4r1CiPdaQ+4AjgNHgU8B/xuAlHIR+DPgPuvjT61n3cXcE5CZh4tuUt9H+mHPc+HEDxoOf+zsCgvpIi+/VIWohmMhbtg/xF3PbJEiOnOPWki2/AO7YcdVcLyx/HcfT5ItVnjV5RMA7B2JcumOBN95Uu+QzXUcuxOqZTj4GvX9xJXKOzj6nYbDf3R0gUpV8uorlPxX7Opnoj/MnU9tkfzPWLbLJT+jPu99AUQG4elvNBz+46PK03nVZUr+Q/uGiYb8/GCr1o89z7b8F74cfMG1v2sDfmIR1ksOqvX/gotG8Qn4ydHmHpynOPEDJe+Fr1TfX/gK9fnYdxsO/9GReUJ+H8+7QJ3pveJSdRby462S//j3IdwPkzeo7+19fOKurongVtbQ26WUO6WUQSnlpJTy01LKv5FS/o31upRS/paU8kIp5VVSysN1771FSnmR9fH3bshjDFthHnjp2rMDL4WZRyGz2UqzN8KLD66dVTz3wAhPnlsllW/sTnuK499XB8T7X7z2bP+LYOo+KOU3Db/v5CIBn+C5B9YOt593wQgPnVneGvf+xA8hFF/bCEIo+U//tKF7f9/JReLhAFfsGrCGC1500Rj3nljcGvf+9N2Q2Ll2uO0PqPDE6bsbDr/nxCI7ByLsGe4DIBTw8fwLRvjRVimiUz+FsUshbq3ncEIZQid/2HD4T44tcOmOBCPxMAADfUGunhzcOvlP/gh2Xw8h67C9f5cKrxz7XsPhPzyywKH9Q/SF1OHwzoE+9o9Euft4921QQBHZ/hepdQPW/2KiqSHqBZ41h8We4vRPlQVan+VxwFKqDdzjh04vs28kyqi1EQBuPDBMVbI17vHUfTBxhfJkbOx/kQpPnH1g0/AHTi1z2c7+2kYAOLR/iHypypNbcc4xfRh2X7e2EQD2Pk8d/jVIJT18conn7B3E7xO1Z8/ZO8hCusjU0hakMp65B/bcqAjMxp4bYfHYpnMOKSX3nljkxgPDiLrx1+0b4sRChuVssVtSK1QrKl167/PWP99zA8w8tsmQKFeq3H9qqWZN23juBcM8Or1CoVzxWuL1KKTh7EOw/4Xrn+95Lkw/oLLR6pAplHl6NsUN+4fXPX/ugRHuPZGkWu2yIZGagaWTar/aEKKlIeEFekQAKr67MdVyx9UqjfTcQ5uGPzy1zDUbUi2fs3cQn4AHTy97JWVjSKk2wu7r1j/ffUh9PvvgusflSpWHp5a5bu/guufX71N1fIdPdpnISjkVy7XltbHHUkxT62s60tZGPrRv/UZ+jvX3PHC6y/KnZmH5FEzeuP75Huv7DTUpM6t55lIFrtu7vm7y2j2DADzS7ZqUhWegsKIUZz12H4JqSZ0f1OHYfIZ8qco1ewbWPb969yCliuSZmS7XdMw+BrKy5k3a2H2d+rs2JEw8fnYVKdkk/7V7B1nNlzmz1OWEiXMPq88b9c+u58DKmYYRCS/QI4LsojpY2nXt+uehKIxeopRsHeZW85xbydc2ro1oKMD+0Vj3LerF42rB79pABIkJ5V7OPLru8fGFDNlihWs2yL9zoI/ReLj7mU8zj6rzgckNRDByIQSjyiqtw1Pn1Ea+cnf/uueXTCToC/p56MyyxwJvgL2RNxLxzmsBsfa6hSfOqvm9Ytd6+a/crRTTI1PLHgjZAvb62HnN+uf2/2Nq/QVQj00rorpy1wYimLTkn152XcSWsIsnd1y9/rm9HzZ4xPb82vNtw/5/PH62y+v/7EOAaCD/tepzA0PUC/SIwN6oO6/d/Nquazf9I2xFefmGjQxw+c7+7itSW76NRAZqcW2oMrYzIy7dsVn+y3YmeGqmy/LPWop+x1Xrn/v8Ks47u54IbKK9bOd6+QN+HxdPxHlmtsuZH7Z8E1esfx6KKjKbW5+5YhPBpRvkH+gLsn8k2n1FNPOoypAbvXj988QOVY+yQf7Hzq7QF/RzwVh83fPJoT4G+oLdr7KfeRiiI+pcoB5jl0IgsomIH5teYUd/hPHE+mKtiycSBHyCx892Wf5zD6mzpfD6+awRQ48IugQ7xWwjI4NSTunZdXHeI7PK9b2kQRXr5bv6mVrKsZLr4oHx3FMqhDV6yebXdl4N80+pQhULT51bxe8TXDge2zT80h0JjsymKXfzwHjuSXVQPNCgCnfHlUpR1R0AP3EuxUBfkJ0Dm6suL55I8HS3QxNzTyjZIwObXxu/fFMK4+NnV9k/EiUe3lzUf3AisTVENnYJ+IObXxu/TK2vOjx5bpVLdybWnc+AOrC/bGeCp7st/8yjVhh3vTz4A4rc5p5c9/iZ2TSX7Ni8dyNBPxeNx2tE3TXMPq6y5DaibxAG9zZNgXUbPSJYeFpZFLEG7SFs5Tr/dO3R07MpxhJhhhqU019mWdld3czzT8HQgcbl6OOXq/hp8ljt0dMzKS4YjREObC6nv3RHP4VylZPJLsZJ555UCmfjRga1QfLLsHq29uipmVUu3ZFYd9Bq45IdCRbSBZLdLCybfVzNcyNMXAGLJ9YVlj0zl+LiJq0wLp6IczKZ7e6B6+zjMHFV49fGL1frq+7A9ehchoPj8YbDD44nODqX7l7mVrUK8880n/+xS9ft3UpVcmw+zcUTjeW/eCLBkW72rSpmVVh67NLGr49dqv6+LqBHBPPPNLamAcYsd3lhbTEdmU01XUgXWu7y8fkuLqb5p5QibQQ7nXFhbTE9PZtqaBEBNQV1pFtEJqWlSJvIP2b9X5JHrOGSY3NpDjaZf/vv6ppVWimrrKZm8o9fDsiaMipVqpxOZrmoiSK9eCJBpSo5sdC8ItlV5FeUxzt2cePXxy+DYlodWgIr2RIL6UJtnW/EReNxUvkyc6kuEfHqFJRzzXtSjV+qxuSVlT+1lKVQrnJwvPH6v3AszvRyjlyxS0ScPALI5vM/erEaU1XynFzIcOtPTrKYcT+zbHsTgZRKyTf7R/RPqgNLi5WllBydSzddSLuH+ggFfByf79JGLheVtd/Mohi5SH22UjDzpQrTy7lN8V0bB8ZUuOhEskvy55Ygt9iciEdsIlPyJzNFVvNlDoy2I+Iuyb98SmXWNFNE9nMrc+X0YpZyVTZVpPa6ema2S4ZE0urPNNJMfuv/YhkSR+cVwTYjMttT6Fo3WNvA2Xi+YcPeF9Y4O6x7UTNDbjyGlHB8oUvy29Z+U0P0EpUCvqwqjO89uciHbn/ck1ql7U0EmQWljJr9I3w+tcgsj2A+XSBTrHBgdHN8HcDvE+wfiXKsm4pIVporolBMxa8t+c8sZpESLmgifzwcYDwR5kS35F86oT4PH2j8emKHOj+wFJZtKV8w1lj+Hf0RwgEfJ7tlUdshN5twN2LoACBq8h+zFOSFTRSpva5OdUv+BYsImq2fkQvVZ+vvtBV8MyK4qOtEYNWYNCMCm+As+Y9ZnnozIrafd23/Ljytzvfsed4Im8gswji5kCHgE+we7HNdlO1NBLYiavaPABi+QBV8ACcXVOx8fxNFCnDBaLx7oSE7R3q4hfyjB2sW0XFLwTQjMvu1roUmrHllaH/j14VQ/xtrw9vz2ozIfD7B/pEYJ7vl0dQs6iZEEIyoIkVr3PE2RNYX8rOjP9K9M5rkEVWRPtSEiGNjEEqowjjgZDJL0C+atsseS4TpC/o53a3mhQtH1CF9bLTx64NWu3rLoj61mGU4FmKgr8HBOGrtC9HF0O7iCWWoBcKNXx++QH229NTJZIY9w1ECfvfV9jYnAqup0+C+5mMG98LyGahWagrmwEgLRToW4/Rilko3KhRrRNBkI4Pa5NZFKbal3JLIxuLdJ4JW8z9ycJ0ibaWIAPaPRrsn/+IxpYiiLe6hGLmoZpGeSipF1B9prIgA9o1Eu0tkg3sh0OQeASFg5ILaOptayrFrsG9TxtDacMHkUB9T3SrKWj6llGWjRANQRJzYWdvnp5IZ9g43XzuRoJ+JRKR71enLp9fIqhGiIxCM1e3fLPtHvLmzYnsTwbJNBC3+GUP7VBw4da7mmu0abH5hxJ6hKOWqZHZ1c48f17F4XDWraqWIBveq8Fd+lRMLmZYWEcD+kagVi+9CCuzSSWV1bsyhrsfQPlidhmqFqcUck0PRpooIFMmdXsx2JwU2eay1IgLlrVlEML2cY89Qa7d+/0iMU90iguXTzb0xG8MX1OQ/s5hlso38k0N9nFk8TxQpKCOjzqNvp0iV/F0ksqEWRpAQ6vWlU0gpOZnMsK+FEdoJekQQG1trVtUItrW6fJpTyWxb12y3tVG6YlUsHlfeQCtFZG+UlTNMLeXY08IigjX5zy53Qf6lk83DEjYG9qjK49Q5ppZzbeOj+0dilCqSmW4Q8cqZ1t4MqPkvrEB+hamlbNtbyPaPxlhIF7vTvHD5TMtb1ABFZMunoVJmainLnjby7xmOdqdNg5R6RDC0H5ZPUShXOLeSa6tIlUfThbVfyqmMrcH9rccN7oXlU8ynC2SLlZ5H4AmWTrXfyLbFtHSKqeWclkUEdMc9XjrZ3qKrI7Kzyzl2t/BmgJqine7GZtCS31JUy6eZXsq2JQL79bPLHhOBlOoegoHJ1uOs1+XyGaaXcjWibQY7dOG5VV3KQWYOBtpZ1HtAVsgvTrOQLrZd/3uGoqTyZVayHhNZZl5l1LTdv/tgZYqphRWqkpahIYDJoSgzq3nvPUr7XutWHgGov2/5NNOWl9LOkHOK7U0E7VwzsDaygOVTliLVU0SeK9KaImpj0VkWk1w6xbSO/NZGn/baIygXlfyaRFZMntJSRLsGu+TR1BRRO0WqXl+ZOU6hXNWQXxG15xfCr0ypz+3kt4hsflqd07RTRHZrbc+9AluR6oSGkCyeVeEtHUOuUpWcW/HYkNCVf2gfFFaZn1d3bezyIGMItjMRVCtqM7T7RwTCkNhJZfEk86lC239EJOhnNB723r3MJpUiakcEsVEI9JGfP0GhXG1LBKOxMKGAz3siWzmjbiFrRwSWIkrNqo3czqK2FannRLasiqzazr/1+uqMyvxop4h2d4vIaorIXfnt0JfncXad8z2ora/sjDrwbrd/bfk93786iRJQ+/syM2r9n9dEIIR4rRDiaSHEUSHEplvThRCfEEI8ZH08I4RYrnutUvfa7W7Io4XVsyr23O4fATC0j1LyJKD3j9g91Oe9IrItuoHdrccJAYN7KWjK77PylKe8lt/eCK0ynkBdvRkbp7igNn47IouGAgxFg12Yf5sI2oSGYmPgD1NIKvnbnRGMxsME/YKz3bJI2xFZv1pftvw6ZwTQBUWqK7/l8ZeSJxACJvpbh0Ztj8bz0O7yKXVHenyi9biaR3ySeDhAf2Rzjyo30PFPFUL4gb8CXgVMAfcJIW6XUj5hj5FS/l7d+P8C1Dffzkkpr+1UDmPYFkW70BDA4F7EMXVbU6uMIRuTQ308Pu1xF8MaEbRRRKDkX1Abp51FDUrZeu4RtKshqMfgnpri1ZJ/qM97i9omgnYWtc+nyNryINoRmc8n2DEQ6Y78wq/SK1shHIe+IeTyFOGAj7FEk5x3CwN9Qfojge6EhqIjrTPOQP19/hD+lVOMxQ8RCrS2fXcO9CFENzyCU2rt+NrY4pZH4Fs5za7Bqxr22HIDbngENwJHpZTHpZRF4DbgTS3Gvx34Fxd+b2fQqSGwMbiPUGaGAGWtqr7JwT7OLue9ve1odVp97tcjgnBajdeRf/dgFzyapZOWRbSj/diBPYTTU/h9gh1tLDqAXQNdIILlM6rYKjLYfuzAHsKZaYZjIWINuo5uRNfkH9i9/la4ZhjYQyhzlt1DfVqKaM9wtAuhIY2MIVDtzAf2EM1MaXnzoYCPHf2R7hCZju7pG4TIAH2a8juFG0SwGzhT9/2U9WwThBD7gAPAnXWPI0KIw0KIu4UQb272S4QQ77HGHZ6fd+GS7+XTgNCzqIf2IaiyUyTZ0aD98UZMDvVRrFSZ97IL5soZpUibVVXWY3AvkfIK46FCyxoCG7sG+5hPFbztgrl6Fvp3treIAAb3kijMsDMR0qqq3GV5NJ52wVyZUhadjoU2uIdEYUa7NcAuy5DwFMun22cM2RjYQ6Jwrm1YyMbkUB9nuhEa0iECgKF9DBTOannz0KUUUp1EFRuD+xgonDvvicAEbwO+KKWs1zD7pJSHgHcA/0MI0bBfgpTyk1LKQ1LKQ2NjY42GmGH5lHIbm5V318Ni7quiyw3bN29EV2oJVqaURaeliNSGuSaR0rLobPnPeamMUucgsav9OIDBvQRlicsH9OSZHOojU6ywmit3IGAbrJzWMyIABvYwUFlk36BeJHbXYISZ1by31ekrGjUENgYmGanMtT0otrFnKMrUUtY7ItatIbCH9+9muJJk54Ce/JNDUW9Do/lVVeSpKX9lYC87qrOe9Biy4QYRTAP1K2rSetYIb2NDWEhKOW19Pg58n/XnB95hdVp/I1u3H10c1etBspZ54KF7uWIgv0VkV0T17vOtpcB6GZ6wPQIdWAeCV0T1zl12dUP+5TPtDyotyIFJfEgui+pderJrUKUwzqU8IuJyURGxpvzF+C4S5Ngf1yPWHQMR8qWqd0Rsp+5qejT5yAQjLLO7v703DMqQOLeS866WIHVOfdYJ6wKp8AQ7xKK2R+MEbhDBfcBBIcQBIUQIpew3Zf8IIS4FhoCf1j0bEkKEra9HgRcCT2x8rydIzajuljqwDtT2h/QUUVcUqU4NgQ0rs+hASE8R2ZafZ1aRlJZHoEcEJWvDXBha1BrveS1BIaUuzNG0qFMRZUhcGNIjYs/lX51WqbuaFulyUGW27A/oyW9n5sx6RWT2+Vi7jDkLS/5h/EJyIKxnyO0YiFCVsJB2v+8/UEcEeut/yTdCQuSYjHoXqu2YCKSUZeC3gW8BTwKfl1I+LoT4UyHEG+uGvg24Ta73Fy8DDgshHga+B3ysPtvIU6RmtBWRDPaxImPs9i9rjY+FAyQiAWa9SgGslCA9U0vta4dscIiKFOzSlH/HQASfwLsU0tySsug05Z/3qVDgbp+uIvW4lqCWsaVHBHOW/DtZaDNSYdeAx9XR9o1vG+/5bQJb/l0iqTW+RgRetflIzajPmobcLKoX12RgWWv8RMJj+VctItDUP7NyEIDJgHfXaLqSlCqlvAO4Y8OzD274/sMN3vcToMk9eR6ikIbCqj4jZ0ssyEHGpJ4iArUZPLupKXVOWXSaoaGzqyXiDDKOnvxBv4/ReNg7IjO0iGbyQQZlmBHN+beL4jyzqFfsjC09IpuuDHERMFrVS3Kwicwz+dOWItUkgunqCFcCY5U5rfF2ZteM1+tHU5FOVwZ4DjAmDD0az4jMll+PyM6Uh3geMIaeR+wE27OyuGZR6C2ks8s5ZuQwgxU9iw5gPBH2biGtmLnGc6t5ZuUQ/WUD+fvD3sWobYtU87B4LlVgTg5qy++z0kw9axOQNrRIM5JFGWegrLeRE5EgiUjAOyKw13+7YiYLp4sJStJPf2lWa/x4v0rA8M4QmgEExMa1hh8rqLvE+4t6RDxhye8pEYQH1MVRGjheUDfXBTJ68+8E25QIzBh5djXPHENEC/ppqxP9EWZXPdoIJjUE2IrUUP6El/LboQk9Ip5LFZg1nP/xhIdE5mD9zMoh+gzk3zngIZGlzqnU474hreGzqSILDBLO6XkEkaCfwWjQW48gPq5XAwEcT0coEcCXPqc1fiQexifwbv2nzumfTwLH8om193mEbU4E+hbprBwkmJuDql4mwXh/mPlUwZsUOkeKaJBgVm8jg+0ReLgRQK+YDCX/wnkl/6y6kCaol843lyqw5BvGb2DRjSe8DC3OqrWjWaU6s5pn2T+MSOvLrwwJD88IDBTpTKrIsm94LTbfBn6fYMxLj95Q/tNpHzkR1ZbfCbY5Eej9M+ZTBWbkMKJahqxeeGI8EaFYqbLsRTve1AwEIkoZaWAuVWDRN4Ivl4SynnIZS0RIZgrepNCtnlU9eJrdjLUBc6sFVoOjCDukoYHxRIR5ryy69Iw2iYEiskxwRClgTYwnlCHhCQwt0rnVAmlD+ScGvCQC/YwzUPs3FRozsqgn+iPMejX/q+e0z2fAln+05xG4jtSMugIunNAaPpfKkw5ZFbya/4xanNGL8ER6TsV3NS26uVSBXMQqwtO06ib6w0ivUugMN/JsqkA+Mg6ljErd1MBYIkyqUCZX9CDlLjULCb34Oljy942rudf0KMe89CjTs0ZEMJvKU4iMrZ2NaGAiEfYwtGJmUc+lCuQj5kQw5wWRVatqHjXlL1WqJDNFtf4NDCFTbE8isIuZdBXpaoFK1Nr4mv+MtcwDDzZDekb7oA/UYXE5Zib/uJVC50mc3dAimlvNU7EPBrXltw8sPZDfIPUYrPmPTqgrT3N6B8Zj8TDFSpWVnEcepW7qtJTMrOSpxias1ud6hsFEf4T5dMH96uhKSRWUacqfLZZJF8qUYzuMQisT/R6FhrJJ1fVYU/4Fq01NJbYDUmfdl8fC9iQC042cKqydJ6zq/TNqisiLxZSeM7JI51MFhP33Gno0c14QWeqsGRE4kH+83yYyl+WX0oiIq1XJXKqAr9+QiL2Sv5hRqdOa8q/myhTKVUS/ZcFm9M5pJgYiVKqSpNv9tmyP1iCsq8bvgmJK26OcSERYypbc77dlK3NN/VPbf4mdau141LZjmxKBWYx0PlUgNLgDEA4sai8UqXmMOjCwa+29GrDldz20Vcorq0jzoL5YrrKYKRIctOXXTGFMeERkuSWoFLXXTzJTpFKVhGz5NcMrnslvmDpt//9DhvM/kbBTMLdWfpsIgkO717+/DWyPfqvn39YfocFdat3l9GuZTLD9iEBKY9d4PlVgZCCmDjg1LdK+kJ/+SMB997KUV+0NNC26TKFMplghMTwBvqC2/KPxEEJ4sBFsi1LTo7E7uMZG7I2s69F4FNqyLVLN+bf//9FhK9VXU5Haff/n0y7Lb1qVa8kfG7aJTE9+u0vvjNvr3zDRw1ak0RFr/nU9+n6PQovG8qvf3zdqJr8pth8R5JagUtAmgpVciWKlqizk/p0ODpy2VpHaG2G8v08tPk2LKOD3MRLzIBc/bcmvWQxkK6Kh4REIRrUV0VA0SNAv3PfIDKta7fkbGLeJQDO05ZVHYFgMZ9cCDE7sWf/+NvCsOtehR9A/vmf9+9vAszO+VTMisOVPjJrJb4rtRwS1jWymSMcSYStOp08E4/1h90MrtkWpGRqyzyjG+8MWERjInwh7oIgsIojrEYH9+8f7+5QVrim/EIKxuAfy2/Ova9HZ8g8PqnRfTSKLhwP0Bf0eEJkZEdi/f2RiDyo0qif/qFWU5foZWeqculktqnEPB4qI/T7BwKjl0eiecXhGZOeU7H69TqhzqQLDsVBdaLTnEbiDmiLSJAJ7IyfCKjSUNqvO9cyi01WktkeQiKjNb5A54UlRVsaQCFL1RLbTyCIa64944NGYtWewLcqxhHUbm6b8QqiiJtdrCVLnrBqUQa3h86kCiXCAvoh1CZKmR+D3CYZjIebdTj9OWQf1OhcaoeQfjYfw9Q2CP7S2/9tgKBok5Pe5H9rKzBtm/BWU7rHfoym/KbYfEWQsRa4ZmrBjtOqfMa7er11drBSRq1dWGmZN2BZNbTFpWkTgUXWoTaQxvcuF5lYL+H2CkVhYeXFGRWVeKNIZCMXb35VrYS6VVxad3+dIfvdj1LNGNSjz6QKj9j3F8R1GRWUjsXAt/dE1pM1qOOZSBWUECas3UUbPkBNCMBIPkXSbyNJzENe/WGs+lVdGRDAC4f4eEbiGmkegr4jASueLjYOsaJ/cjyXClCqS1byLueCpWRA+bUU6nyoQ8vsYjAbVe3JLKhdbA+P9aiO7mguettoz6NwMhyKy0XgIv08oRWTQ5kApUg+IwCDjbCGtLFJAeTQGRVmeeGQGxUwAyXXyTxjJP5oIuU8EmXnttQ91FjWoPW+gSEfjHhBZZk7bCIU6IgPLEO0RgTvIzCkXUdM1nksViIb8xMOBtfuBNf8Z9gZydTGlZ1WM0df+ykxQ8o8lwuqKSnsDZXTbZISpSkhmXJQ/M2fkGiczxVoGDfExKKahqHfz23giwmKmSLHsYpuM9KxR6u5Cusho3JZ/QhG5Zi64J20yMgtGinQhXVTeGBh7BKPxsAcW9byRIp1PF9bWT8xMkY7GvSCyBe2waLWqMhbtDCZi4z2PwDWkLYvCoD3DmkVh/QM1/xm2AnC1TYOha7ywzrW35NfcDCOW/K5uZsONvJAurCmiGpHpuff2BnJ1M2fmjVz7ZLpQm0fi4ypjbSvbZKTnDImgwGiiziPI6DdedN2iltJo/u2CtvUegf4Z34jbRFZIQymrPf9L2SLlqmSsfv2cz0QghHitEOJpIcRRIcQHGrz+a0KIeSHEQ9bHu+tee6cQ4oj18U435GkJQ9dyPpVfs+hsBaapiEYsj8DVxWRYTLaQLjJmu/aGinTUEyKYNVSkxdo8rs2/nkfjifyG60d5BM7mv1ZL4FZ4qFpRxXyaFmnJapq4zqOplrXbZIzGw2SLFbJFl+4uzi+rNh2a85/MFKhKNngE+md8tkfjWr8n2wDTDeum6xIN4PwmAiGEH/gr4HXA5cDbhRCXNxj6OSnltdbH31nvHQY+BDwXuBH4kBBCr0m6U2TMLKLFTJ0iipsRwZpH4GZoaE57I4NlkW60qDWtohqRuRoa0vcIpJQspAtrFpGhIh2OWaE5t+QvFyC/oi1/vlQhXSjXGRJ2aNGQCNwqKssmAam9/hczikBr8kfVlY/6RGzNf8olIk6bJXrM1TK26mLsBmd8o/EQxUqV1ZxLRGbLr7l/7flfZwgVVlRRqctwwyO4ETgqpTwupSwCtwFv0nzva4BvSykXpZRLwLeB17ogU3Ok540U6WKmxLCtSCOD4AsYpKCF8Anc67cipdrMMb0c6mpVricyU48g5nJoq5S3+tzozX+6oPrcrBGxLb/ZGc2iW/LbClBz/m0DYHSTR6NJxDGXPcpaxpye/LYnMrqRiDVbsY/WiMyl9W8o/xqRbTTkDEO7bhkShh6BLb9t0JjKbwI3iGA3cKbu+ynr2Ub8nBDiESHEF4UQ9q3fuu9FCPEeIcRhIcTh+Xn9ON862DFGzX9EtSpZyhYZjlnFHz6fOqjV/Ee4nktdTKsYs2YxzUquRLkq1zZyOKFyyDXl7+8LEPAJ9zwawxoCWwE6PSOonXG4tpHNUl/dkt9WCB3DsKp7M5GZeTRrhsTWrJ9NitT+u03P+NwKzWXMPIKljfKPXQKXvsGTxnPdOiz+N2C/lPJqlNV/q+kPkFJ+Ukp5SEp5aGxMP7SzDnaMUfMfkcqXqVTlmkcA5gdOsbB7HkE2qT7bLnob2AqwZlHbudSa8q/lUrskv6EisuWvHXYH+yCU0A5NxEJ+QgGfixa17RHorb+aIk1sCK3ohuZsj8AtIjCU3563TR6Bbmgo4XLWnGFoqLlFbRYadc0jNqyhsf/vQ1FL/r3Pg7d9Fob2uSNPHdwggmlgT933k9azGqSUSSmlvRr+Drhe972uwnAh2Yqo5hHY7zVJQUuEXNzIFhFohyY2bGT7vZobwX6va4rUsIZjPmVb1HU3mcVGtS06IQSjMTfn37boDInAJuKAlbasOf+RoJ9YyO9+aMhUfpvI+oatn6NHBLYn5NoZQWZe1dBEh7WGL2aK+H2C/oi1f2tnZGYegXse5Zy6J1qzvcRSpkh/JKCKET2GG7/hPuCgEOKAECIEvA24vX6AEKK+Q9QbgSetr78FvFoIMWQdEr/aeuYNMmaKaClrWxT1HsG49kYAl6srTT0COzQRr1OkhkUpI26mANbmXy/9teYRrCOyMSMiG3bTozEMDTUmYnP5F91URL6Adg3NQrpAJOgjFrJqVvwBRQaa8ocCPgb6gu4q0uiIdg3NYrbIUDSIz2elivcNqQ68mut/OKY68LoWGkqbFZMlM8U1b8ZjBDr9AVLKshDit1EK3A/cIqV8XAjxp8BhKeXtwO8IId4IlIFF4Nes9y4KIf4MRSYAfyql1MtNcwLT0IS1kYej9RapVZ0opVYtgqsWtX1IZxoaim3wCM4+pP0rR2Mhjs2ltce3RG3+zUIT6zZDfBwWj2v/ypFY2L0Ye2ZOnbGE9NpLLKQLxMMBIsE6xWVoSAzHwu56NAY1NHYxnKgfHxvTPiwGl4uy0vrne6CSBNatHbuoUjM05/cJhqMunvEZFvOp88lnCREASCnvAO7Y8OyDdV//EfBHTd57C3CLG3K0hWGMtOYRxDcQQaWgsl80Lo8fiYdIF8rkS5X1CsEJDD2ChXQRITYo0ti42sjVqlbjrpF4iGRG3Z0rNBVIU6TnjNpLLKQLDPQFCQXq5IyNwpl7tH/lSCzEUbeIzN7ImvOwrgbCRmwU5p7S/pWjsRDnVlxKFzRUpAv1xXA2YqNGRDYaD7sbGjIhgmxxLb5uIz5mWF3s4hlfZg52XKU9PJkuMjnU587vboPtVVmcmTOKMdqW2DqPoFZdrJkL7mYtQWZBtccIJ7SGJ9MFhqNWnx4bsTFVFJRf1voZo/Ew+VKVrBvVrdmk0UZurEjHrXtf9eSxicwVGBeTFdaHhcAKDekrouHYVspfV4xowwkRuKlIDWuANlnUhm0aXO2XZFhV302PYHsRQXrOqE/PUqZIX9BPX6hufC1zQrdNg4uZB9mk8gY6sUiNMydcJLLsgrY3A1bny0aKVFYhqxdBHKkRmQtFQYaKNJkurj/oBuPGfyNxFdpypbrVuM9Qg/mPmiYbhFysI9Dv0wNq/24mArMzGnXG58LeLeVVMZjm+aSU0iIyPe+5U2wvIsiYFZM1PKwx7De01q/HDUWa1K4hAHVGMLJxIRlmTrhLZItGRLCu86WNWlGZWXWxK+c0ThRpokFoBdbCfG0wEgtZHWw7JDIprYZ/+jU0i5liYyLOLUFFT57ReJhUvtz5JfDFrKqjMa4B2kgEI2ruNYnVtdBQ1iwsnS6UKVXk+oxFD7G9iODKn4Mbf117eEOLImq2kW1F5ooiyia1w1pgdY7c5NobVufG3CYyffmTmWJzItNu8+FSLnutGFGPiMuVKovZIqONLFIwzmXv+MC7mIZyXlsRreRKVg1Ng9AQUrvfkH2+tpTpsBW7YVXuSq5EVdJ4/5bzUMxo/ZyReIhMsdJ54z/D88m1GoieR+A+rnorXP9r2sMbxhhti1abCFwss88saCsiaBGjtn+WBuyioI4zV6RUv1PTo9nU8MyGcb8hl6pz8ytQKRokGpSQkgaHrWYe5ZpH0+H6McyYW8w2SD0G4+pi+3yt4/mv1dCYFWM1379m/ZI6PqcxTPRYI4KeR7DlWGzkWgZC6qYgTSKIBNVdBu55BHoLqVCukMqXN4dW+oYAoS1/rXFbp7nUhZSq6jbcCE09Gt3QlluhIZs4ddsDNFWkhkRcK2pySX7DPj1NPWJN+e33d0wEWTP512qAmhCZ5vq3s4469mhqRGA6/z2PYMuxKQ/ZRnTEKHNiKBasLUzHqJRUpo/hQtpkkfoD0DeovRHCAT+JSKDz0IrTYriN8x8ZVJeX68bY4y55NA4bng1vTF80tajdIrKsWVW6Lf+m9EuHHWDds6g1M/7STeSvEZnp+umu/E3Xj0foEUET5EsVMsVKcyIwKKoZjoY6t4js1rmGG6Gx/GYpgCOxEIvZTi0iK6asSQRNLTqflf6rSQTRUIC+oL/z0Iqt+AyJeGgTkQ1Y1a1mirTj6mLDYsRNDc9sGFrU9vuXOvYIzAyJph6ZvX80969tkXdsyGUWlAGjWdVdI4KN8nuEHhE0QVNFBGozaG4E+2e4spDs362BTS146xEdMZJ/KBZyYSObyd80xgvG8qtagq2xqDfJL4SR/LXQYpcVadP57xtStTiaRDYYVW0aOj8jWFAEGu7XGt7cozEksqiLHll0WKuIE1RYOuSva+/hMXpE0ARNXUuwLGozReqaa28YY28ovymRueHRGLrGS80salDzr1lHAMqjcU2R9pnJPxhtcNgXHTGTP+7S+glEIBjVGr6UKRIN+TdXw/v8RqFRv08w2BesHT47hmENzWKmSKyR/OF+yyPTk7+/L4DfJzo35AzO92AtLN1xNb8mekTQBE1dS1gLTWjmIg9HXfAIaq59hxYpGIVW7J/hykYAYyIb7GukSIeNQnMjbuSCZxdVj6FgRGv4YrZIIhwgHGhg0TmY/86JeNFMkTZqz2DDsKjMVfk1sZgpNjYiah6Z3voRQjDkliFkUAO0lG0iv0foEUETtLWoKwWVm62BoViIbLFCvtRBLrKDGKlPsNaCtx7RUTMisyzqjqpbs0kj134pW2SgL0igUQtew9CQO4rIrAZiqZkiAmOPzJUOtqYWaaZBDYoNwzYT6k4OF+Y/Zih/y/k38yi7vX6SreT3AD0iaIJa1k2zGDUY9GV3IYUuYxZaWcwoi87na2ABRkesfkMrWj9rKBaiWO6w31Bmwdi1b9pnxQ6taF5CbodWOiYyE0WaLTUnAtMzDtcUkb78S5kWHkFs1MgjcyVrzrA9SVOPABxl/blyxmE6/z0i2HosZpRFPdAwNGEfOOlZFUNuEEE2qTJOdC+1aOVaOjww60x+M9e+ZcOt2Ki6hLygR2SjsTDFSpVUoYM2DYau/WKmwHCj8wFQ85BbMmqc13G/IUNFtJhtZVEb3qngRitwBx5Ny/VjElrsVP5qVVViGxSD9jyC8wQtLeqaIjUrqunIKnJgETXNQTasjh5yRX4z13gxU2oRo7Y9MrMUxo4usTe2qNt4BMi1lOA2GI6FKFclq7lOiMwwxp5uZVGPKm+yrDefw7EgS9kS1apDIquUIbdsHGNvuf6NsuY69Ajyy6pRoub8F8tVUvly8/XvAVwhAiHEa4UQTwshjgohPtDg9d8XQjxhXV7/XSHEvrrXKkKIh6yP2ze+d6vQ2rW0c5HNqhM79ghMNkKmxFCz8nRDInClOjRr1h5jMVNoXl5vOP+uFAU5ibG3JAKM5V9wKn+lpLwnTflb1tCAg1qCMJWqZDXvsBYltwRII/mzxUrzHHybyDQ7wA7HwixbvZccwbCqeLnRPSgeo2MiEEL4gb8CXgdcDrxdCHH5hmEPAoesy+u/CPx53Ws5KeW11scbO5XHLbSOUZuV2bt2RmDo2jctTzc843CHCPTll1JqWNQYdPC0G+c5lL+UV4kBmh5NrlghV6q4Lr/j+a8V8+nJv2wVD7YnArP17ziF1+2q3JihIRQNIuWagjaGaVV0l6uKwR2P4EbgqJTyuJSyCNwGvKl+gJTye1LKrPXt3ahL6s9rtAythBMqA0ZzIfX3BfGJDqsrDbImlCItNreou31GUHPt9eTPFCsUK9UWrr1hK+dOW2nnHFZFuxSa67jxnHExmfo9zQ+LzdpM1EKLHROBacO2dqFFTUMo3mF1sf17Oq3q9hBuEMFu4Ezd91PWs2Z4F/CNuu8jQojDQoi7hRBvbvYmIcR7rHGH5+f1D6qcYilbbO6aCWF04OT3CQajIedFNVIanRGs5suUq7L5Rg5GVXGRpvyJSIdFNflllGuv2TCsVTEZGHeQ7PiMxmkxn0uKqOPGc4ZV0XaDNbc9Yufyu9Qwz4ahIdFxdbHh/LesqvcIrtxZrAshxC8Dh4CX1j3eJ6WcFkJcANwphHhUSnls43ullJ8EPglw6NAhF65rag51qUWptWtmWl0c7eDAqZhWLZANFWnThSSEUXWuzycs+R3GeGsWkUuufSgKgT6jNg3RkL+D0IrbFqnZGUfHjeccegRunRF0nDXnNhF3O9nDtM9Tq/Y2HsENj2Aa2FP3/aT1bB2EEDcBfwK8UUpZ83GllNPW5+PA94HnuCBTR1jNN7mUox6G1aEdpaAZupa259EyDzk6bJRLPdxJvyHTjaxzWGbYpqGjojKHDc+arp9gHwRj2vKHAj4S4UAH8rscmogMqn5DBresQfeJoO1hvWHWmXOPZlH9v4N6F9Gvtbfpzl0E4A4R3AccFEIcEEKEgLcB67J/hBDPAf4WRQJzdc+HhBBh6+tR4IXAEy7I1BG0XDMnRTVOLWpbYWi79hqHTYbVrR2V2ZsqUi35u1hdbNg5VauFsJPGf44tUkt+zT5Ji9kSolkNDajGaX36hkTHHlkmCaEEBPR68y9mivh9onFVPazNg7ZHo35OR4aQYQ1N06p6j9Dxb5JSloHfBr4FPAl8Xkr5uBDiT4UQdhbQ/w3EgS9sSBO9DDgshHgY+B7wMSnllhNBW9cenLU56JJrqS+/mUfQsfymvfDdnv9OiaxvSGv4klWM2N9MkYIxkQ11Kn+4X12qpIHFTIGhaAh/oxoaG6ZEFu3QozSpQckWGYoGG9cAgXUnx5D2+g8HOuwAm1k4r9tLgEtnBFLKO4A7Njz7YN3XNzV530+Aq9yQwU3oKdK6XGSNal87tCKlNO8o6DA00VqRmvVb6agVtWHnzjWLrsXyjI7A4gltEYajIY7M6vWG2oTMglIcfr3tkswUGXRZkY7EQsyl8trj18G4T1KpfVjCtF9SJ63AHXTubFuMZdhmouPQqEENTbfbS0Cvsrgh9IjAvKisXJWs5h1Uh5qeEWRK7XuZR0egsAplvZREu4Oqo+pQw86dS1bny5aE2e0zAkPXvq0iNfTIhqIh55XRjorh2oRhutlB1VCRNrxidiOihqHRTlqZO+kK0COCrYcWEXTzpqZsEvwhVb+gAWVRBFsr0lpRjZ4yHY6FqEqcVYc66hOjoUgL+tWhQ7EQuVKFnJPGeZ4oUlMi66Cnv3GfpGLzqnQbhrfcdXSnhZt9hmwYd4Dt8IzGcP67WUwGPSJoiMVml3LUwzCXeqiTzAPbojDoJd/20muHufiO5DfuvNiiz5CNqBmR1TJXnGxm04Z5rdp72IgOq7Tgkl64ZygWIl+qOiQywz5DWhb1iCq00+wA21WPTIcITDuQOvXIDKvSpZSta5g8Qo8IGkB7IYFxCp0zj8CBRaFj0YF54zmnHo1p58t2G8GQyDqX3+ywUis0AWtVy22wVpTloLrY4LByrSpdw6KWVatYsD0ce2TFLJSy2utH1QBp7l+DOzlG4g6TJQzP91KFMqWK7HkE5wOSuhsBzBvPOVlMhlkHLXvJ2zBtc9BJmwlji9p9+R1Xt0rpoE+S+/LbP884BbmYhXLOvap0Gw7n33j9GyrSlVyJqtQoxrJbmesSWdShR2Z613W6+8Vk0COChtCyKOxUQsPGbY4tUrcPy+yfp1lUU8uldmoVacpvZNHZP1sDjj2CYkbdRmeoSLXlN23857Ei1e5z41R+0/CKcVW0rvxm69+xR2aa+r0FVcXQI4KGSKY1Dmv8QVVhqamIoiE/oYDPoUWtH2MvV6qs5DRi7H1DgHDQAdPQIi3loJTR9mhsi66t/IYemWOPwGtF6nWygWeK1GHjPGNF6nJVtw3HhoTh+jctRux5BOcPtCxSMKouFkI4u3KwUlL1CppnBCu5ElLHNfb5jYpq+kJ+IkGfuUfgtL2Etkem2QE2ElSN8zxWpFrtPep/nkHWFnRAZKZV6dqhUTOPwG5xrQ3Thm219gzt5t9hvyfHRKYZGup5BOcH7EsttAo6DFMAh6IOUtAMe8lrFZPZMC2qiYbMG585tKjbyu8Pqqs7NTey3TjPuUfgYnsPWCMy3VbmEYetzE0t0qyuIu3S5UYOPYK2yQYOicxY/swCIKBvUGu4Vuq6B+gRwQa0bVhVDwdtDry26OzQjVbWQWxUO2sFHPa7qRXDGbYQ1pG/G20OnF6K0pbI7DYHJkTmIHPFacO2dorUbpxn4JH5hIMzpmxSNbiLDGoNr7Un8YjIlpx4NNFh5YFrYClTJBTwEW1VDOoBekSwAVp9bmwYVlc6atPgsM9Q2zx2+2catNJ2lAtuaJGueTQ68psVBTmT3+UWyPVw0i/J2CNbsBTpgNbwpUyRcMBHX6saGhsG/ZJsIjM2hDILqjWJT09VLWaKxNrVAEHdnRy6RKbu5Fh0clhskDFn9xkybkPTIXpEsAGOPALdXOSOFJFmaMIkxuigTYDnZwSWR9O2Mtf+mV43zssmQfi1FeliVll0Ldt72DBtM+FU/r4hbYt00UQROZDfkUdmWFWsRcL2nRyahpAQlkfm5LDY7dRpD9Ajgg0wtugqRVU5qIGhaIjVfJlSRa8aE3DQZ0jTNbZ/pgGROWpFbbv2mjHSpWyRSNBHn7Yi9bjfkK2INC20Jas9gL4iNZDfaWjLC0UK5h6Zo/VjWBVt0rnT2BAKej7/yYxGMaUH6BHBBhh7BGAQZ3SQi294WKztGoOSv1qCQkrrZw/HQqTyZYplAyLLLhhbpNpVlfZG1iSy4ViI5WyRiknjPGNFWjJQpIaKKO4w2cDt9hI2DEOLQ7GgM49S865uMCUy8zMmY4/MsL3KYs8jOD/Q9lKLejhu02DgXmYXVFhCo9W1+tmGFh0Yy79sRGQeWqSxUSjnVQsCDdiN81ZyJvNv6NpnNdp72DD0yFQH2JJZB1gv+vTYMGzcNhwLOwiteNi50/ByqZG4oUdmV6UbtqDudsYQ9IhgE5KZNpda1MNhLriRe2zaOdLUorN/hwZqbSZMPRqvNrLT6lbj+Xe5vYeN6KhZaDEWolKVZh1gHYQm9OUfVsWCpZzW8GHLI5CaxEe16mz9aMvvcfp3flm1sdCUv1CukCqUn71EIIR4rRDiaSHEUSHEBxq8HhZCfM56/R4hxP661/7Iev60EOI1bsjTCcw2srOiFCNFZNy500T+LuSCO+rlfx7Jbzj/RrdLOQwtastv2CepVKmSyhsoIlOPMmoTmeadHIUVS5HqGUK5YoVcSbMGCFi7k0NvPlWyhIFHZpgxZxfbPSuJQAjhB/4KeB1wOfB2IcTlG4a9C1iSUl4EfAL4uPXey1F3HF8BvBb4/6yft2Xw1CJ1alG73WfIhkMiMwptOYiRmns0Hnlk1aqqszBt72G8fnTn327zoSl/fgWqZQepu956ZNrhFXteDIvhvCLiNSLTXP+m7T3ShvK7CDc8ghuBo1LK41LKInAb8KYNY94E3Gp9/UXglUKlVbwJuE1KWZBSngCOWj9vy2CkSCMDKrVQcyENRg03AlgxUtNrBj3aCDWLVDOX2nOL1GOPIL+sWi1rEvFyztCi87oDrNNiMpMYe/3vaQPjOzm8qkq34fX68eKKWY/gBhHsBs7UfT9lPWs4xrrsfgUY0XwvAEKI9wghDgshDs/Pz7sgdmMYWaRCGGUehAI+EpGAA9deTxEVyhXShbL+YWU4oW4+M22lresR5C3XXrfPjVOLVPdOApuIdT0y02I4k9RdMPbIjDvAmraXMJbfGZFpG0K1qnqzhnmeeQQxw/VjmPptLL+LeNYcFkspPymlPCSlPDQ2NubJ76hUJcsmHgE4qw7V3QiFlDpMNIwxaitSQyIL+hWR6SsiU4vOoD0GKI/MF9AOTUSCfmIhv36/JIftJbyyqI07wDqcf+08dq9baRtW1Rt7BIb9hmp3Kng2/89uj2Aa2FP3/aT1rOEYIUQAGACSmu/tGrQvtaiHl5kHDjsvGt1uZJgLPmLSL8m4BbIKOWm1lwBFZH3DRv2SjHLxvWwvARDuV0Rm2AFWOzRnaFFrN5yzERk0Co0a3wnhsIW2uUegt36GakRgMP+BCIRiWsOTmSJCwGCf5vp3EW4QwX3AQSHEASFECHX4e/uGMbcD77S+fitwp1Q5ZLcDb7Oyig4AB4F7XZDJERx1/jPotwKGbSa6EWP0sl+SoUVd8wiM5t/8EnWviMy4hbChRwZ2da43Fqndx2gwqqmIfD5r/ejNfyzkJ+T3GXgEliINRrWGL5nUAIFxB9hh09ConfpqUJU+0Bck4O9+oKbj32jF/H8b+BbwJPB5KeXjQog/FUK80Rr2aWBECHEU+H3gA9Z7Hwc+DzwBfBP4LSllpVOZnMIREZhWJzoiAsPOnV6GtkzaBDjtxW7q0Ri2mfDKIrV/rrYitX+2iUdp0u8pm1RnQKG41vClbJH+SICgiSIyWD9CCMP5t+7q1lSkRjVAsHa5lKYhYXwnh2Gih9H5pMsIuPFDpJR3AHdsePbBuq/zwM83ee9HgY+6IUencKxIc4sq1VCjQ6J9RiClbN+PpnbYZHYXgddnHI+fXdUbbHhYtqZIDT2auae0hw/FQjwzq1fARXbByCJdzJSIhwOEAwYZ0KZ3QhiF5haMLFJHisigcRvYhpCmRe3FXd0b4bUh5FUxnMt41hwWdwOOiUBWtS/BHo6FKJSr5Eoajo/DGLVRjDE6CrklqOo5YnYHT63q0GwS/GHtGOlipkgiEiAUMLFIDdsEGHlkhq69aaIBOCJiM4vatD2GqfwOGreZeDRe1aDYcODRG3mUXsvvEnpEUIcl08MycJxCp5W5kl1Qrn04ofWzHcUYoyOAVGSggeFYiGK5SraoQ2RdUqQGRDYUC5ErVchpyW/WXsKoT5INw343RpfrGMqfTDuYf6/l96qY0oZxvySDxnNetodxGT0iqEMybdC504ZxLrhBLrJhC+TFbMmZRWf/Lg2sZU5oEplp50hT1zg2anlkK1rDaymAJvOvCeXaG2Z8REcgtwwVvbYLI7EQqYJmB1gv23vYMCRis9CWh32qbDi4k0Nr7dfuGteTX0q5ZQ3noEcE67CULTJs2gvcy+rEjJlFsWQdlhnBy+rWbrn2oB1nrxXFaXlkhhadE48gOgpI7dCiuSGhJ7+U0vkZgawqMtPAUDTESq5Eud2dHOWi6jWkuX4c1QDBWmjI7Ts5DNvHr+bLlKuyRwTnA5JODmu8JAJT174TRaorf9w7InB22Gfm0djFUl54BEtZJ+vHkt/tDqqVslLOmvLnShUK5ar368duZd6uFXjOUJE6qQECah1gDe/kaHu5lMPzvR4RnAdYzBScLSTwyKJeMO5l7si1Bw89ArMYqblHY94BEzSKggxd+3ypQrZYMfcoTfv16LZpyC0BUluR2mdW5mcchm0+dIvKDFOPk04VqVdtJrwuRnQZPSKow5LJ7VI2QlEI9GkvpP4+dQm20RmBBqSUzg6bTNsExDU3gqEizRbL5EvVDkJzum0CNNs0OLgZDgxrIMBc/rhm4zaHxYiee8S6hoRp6rGT1On6n6/bwbZGxO3Wj1lXAOP2JC6jRwR1SGYKzv4RBkVBa5dg6ypSvYWULVYolqvmRBaMqIIjTfkT4QBBv9BQRM4UqfH8GyqiREQRcVuPoFuuvYNWyKBjkVqK1FAROTvjwLwVtcsWdc2jcZJsAAYejfJYky6vH+OGhS6jRwQWcsUK+ZIDRQpK2RkVBQXbE4FTi9Sp/AbVoVopgI4VaVhrfA2GRObz2UTczqJzpki9JgK7atlti7pb8q+dcbhrUdvEYnzxu+kZk7U+tT2CPs3QXMah/C6hRwQWbIZ37hGYFgW5q4iSTkMT4Eh+7dCEsSJ10HDLERGfJx5BIAyhhHZ1btDvY6Av6HqM3bH8NSI2I7L2HoFF7HY/oDYwbqFtw+mdHDoeTbgfAnryLGYKhAM++kxS111Ejwgs2IrZkWvmSJF641oax9jt32FSXanlETi1SA09Avt3uE3ENYvaY0UKxo0LjYjYIMauGrY56DpjMP92K/D2HvGCajPu1zMMFjNFoqY1QGB1gA0apx9rEbFRMWKJkViofdsZj9AjAgs1j8CxIjVtRe2uIuroUovoiFF16HBco7rSqUXtiIjNq0P1iVg/NGfU+bIehvM/FNVo02Bskaqb7RwpIsN+SVqNFx3UcDgiYYd3crgvf8GZEecSekRgwVF7CRvREVX8UtFrpjUcC7GcLVJpdQm2sSK1e/k7VaQGHTx1Drsd3I7l9wn6+5xapGaN29oScTZpZpFmDTtf1sMBkbWNsRvfFV1wFpYDZ20atBRpl/r0OOlgq0PEJvJnDa6Y9QA9IrCwdnG0g9BELZda/xL1qlQX4TSFsUVaIugXJMJOFOkwFNNQymsNH45pVIdmFiBs5tp3ZJEaEtlSOyLOLJhZdE769NgwvBxIKVINj8aomM9BexIbTkKLbivSToggZuqRaRBZxlR+hxmLLqFHBBbsGGnCaYwU3K0uNrVIrWI4x4oUtG/6Go6FkLJNdaiDhm2ON0JsxJjIZFsiNivmW3TSp8eG4RnBkHXG0bIDrAP5u0UEWh6BsSLtoIWzofxaHWwN17+jGiYX0SMCC7ZF6sy19yAX3NQidVJVbMMhkbU8MOu2a2//Tg1oXTnooOGZ49S/6AiUc1DMag0fjoYoVqpkWnVQNW1B3en6KWW15W+bbCCl+l8aNizsmkfTrhV1Mav+n5rzXyhXSBfKz16PQAgxLIT4thDiiPV5U66XEOJaIcRPhRCPCyEeEUL8Yt1r/yCEOCGEeMj6uLYTeTqBWkgOY6QOFWnLVtQOFGlHisj+nRrQ9mi6aZHav1MDWtXFhjH2jhUpaIcn2hKxlEbyV6vSWQtwG4ZtMkbiITLFCvlmd3IUM1Ap6PdJKlbIlSrOLWr7Tg7NDrBtW1Gb1kDYGYvPViJAXTn5XSnlQeC71vcbkQV+VUp5BfBa4H8IIQbrXv+vUsprrY+HOpTHMdyxSF2srjRVpJmis9RLMG4zMaTTJqCrHoFhvx47F7yZR2BbpN1SpKb9qmxDotn8GyrSFathW7eIzP49y80O7E1Tj7MdZMzV/x7NOzmGoiHypWrzOy0M5e+ohskldEoEbwJutb6+FXjzxgFSymeklEesr88Cc8BYh7/XdTjq3GnDrh40OCwGHUVq2HnUtGGbjZpFpyd/2w6eNUWqJ3+5UmUl10GM1G2PoLAK1ZI2Ea847Xxpo0bEho3Pmq0f06pop1W5NoyJrE11tGExXK09g+P5N6suHm7XZsK4BqiDGiaX0CkRTEgpz1lfzwATrQYLIW4EQsCxuscftUJGnxBCNDVphRDvEUIcFkIcnp+f71DszVCHlQ4t6kBI5WwbFNVEWxXVGFqkpUqVVL7s3COIDALCvM1Bs9BWMQ3lPMT0+H45V0JKFyw6tzwC02Iypw3PbBiGVto2but2nxtTImt3RmaYetxRDQ2Y9xtq13jOWH67hsnh/nUBbYlACPEdIcRjDT7eVD9OqhSGpmkMQoidwD8C/0lKaecd/hFwKXADMAy8v9n7pZSflFIeklIeGhtz16EoV6osO7ndqx6GNx21PDArrKoe6ZqKtKOqYgB/APoGteUPB/wkwoHmHkHGIupuWXR9gyB8RvLHw4HmHkG3e8nXLFKzDrBNiSBjZlE7buFsI+bwjKwtkemmTndQQwPOz8iaEpmzhnlbGRpqmysppbyp2WtCiFkhxE4p5TlL0c81GdcPfB34Eynl3XU/2/YmCkKIvwf+wEh6l2D/Q0c7qexzUhTUVJHarr0eEXTUZ8iGm5kTtiIylN/xRvD5VU8ao+rWFv2Gaod9hr3knc5/ZBCEX3v+E+EAAZ9ooYhsj0ZPkXZMxOEBS36X7iTImIW2bEU62ukZmVtZc9mkMkwig1o/L5kp4PcJBvochnZdQKehoduBd1pfvxP46sYBQogQ8GXgM1LKL254baf1WaDOFx7rUB5H6KjPjQ03c6kNQxNLnVp04Kg6t6lFZ3sEhoq0c/lN5j/MYrPDSod9hhzH2A3bHAghWhOxacM/p3cR2PD5jOQf7NM4I/AFVLhVA8lMkYDTqnQwDm21PePLLKhzQ5+eeu0odd0ldEoEHwNeJYQ4AtxkfY8Q4pAQ4u+sMb8AvAT4tQZpop8VQjwKPAqMAv9nh/I4Qs0168gjMC9Tb76QbEVq2Geoy/I3j/GaeTTuEIGhRxbV8AhMb5fqxCOLjRp5NC2LmjILqpGapiJdyhTpC/rpC3XQ+dKg31DA7qDaKrQSHVEEqYFkusBIvIOGbXYHWN3LpSJBfKLVGYdZxtxCuthZNMIFOKRQBSllEnhlg+eHgXdbX/8T8E9N3v+KTn6/W7AVaWehIRfPCGpEYKZIO1JE0RE4+6D28KFoiKfOrTZ+0fCMwB35h2HxuPbw4ViYZ2bTjV/MLkAgAqGY1s9azBSJOel8WQ8HjQtbWtQmirSTjDkbMbN+VS2JzFHqcYcHrQb7177TovkZh3kx4lbdVWyjV1mMsijAhdCQQXVly6Iap7dLOU0fhTXXvlXbgjqMtOpAmklCMKau8dTAYqZIIhwgFOhgORqHhoLN0/8yVudITUW6lCl2XgwUHTYOzbU8rDS969ppMaUNQ/mHWnqUW2BRx0bN5W9FZAZV0cqj2bqMIegRAaAUkU+sxS4dwc02E5kFq4Ww3uJYzBQZjAYJ+DtUpJWiSv3UQMuimsy8eXsAVzayPpENx8LN5XdQw9FxxodhaGso1uJyGtM+T250vjSVv9UtcYZE4PiK2XqYGhI6HpkmkmkX1k+H6BEByqIYjnV4WGOcedDiwCxj2DCsk4ZbNgyri0dqKYANrOrsgnZYCxQZdq6IRqBaVvc8a6BlUZBhw7alrBsegRUaqrboH1SH4ViY5VypcQdVwz5VS64Qman87YjMwJBIFzu3qN06I6tWjeQvlCuktrjPEPSIALBcs45jjKZEYFe3NiKCeeOGcx3HGGvy622GtRTABladofyuWEQO57+x/GZ9hpKdtKC2ERsFJOSWtYYPR4OqA2wjZeQgxt4xkRnKb19Os6mDarWi1qAmEeeKFTLFijvr3/hynQZrp7ACsmJeg7LFh8U9IsAlRWrYpqG9R6BvUbtLBC6U2WeSxvJ3blE7a3PQ2CNYNLOosy56ZIYdVDdZpZUS5Je1Fand+dI9+TWL4pp1UM0tA9K4KrfjMwLTDrAxlfVU3eiRmVYVd3IPiovoEQFWjNeNhQQOytQbWXRmoQl3sj4cWtQbFZGURmcEUkoWs254BKb9YprIXy5AMaUtf75UIVusdG7RGa6fpv2S7MZpmorIbvzmSmgLzKtzN7YpcZi6222PfigaolKVpPIbOpbWalDM2mNsdfpojwiwQ0Md/iPs6tCMXh+kwWgIIdhc1FStGp0RSNlh50sbphu51u9mg/y1hm16HkGmWKFYrm6Z/JtagRtu5I7uWq6HW/2STBWRW+0NDM+YRq2Y/sJG+R22Z3Al2QCMOwhv8iiNM/7sjMUeEWwpiuUqq/ly54dNPp9VFKRHBH6fYLCvQVFTflnFGDUV6WquTKUqO19I4X5VhKQpf39fAL9PtFBEXeozZMPeeJqKyJZ/k0dg2PlycYvkX6tu3UDEhi2QF6zU6dFEh+vfwZ0E0IiI7RoUQ/m77BHY+mJTaDdtddmJjWv9nLVi1l5oaEux1GnnyHrExowOnBpWFxsq0qRbFoUQRvILIRqnADrsk9SxRRqMqiIwTYtuTf6NRGBm0dUUUacbuc8stNU0/diwvYRrvfBNQ1vWfNk1PDXYRBDXU6Qdt/ewYZgsYc/XQjOP0qArQNAv6HdyRa6L2PZEsLaR3SCC0TWLQAMj8TALqSYWke7tRq4S2ShkDORvdIm6YZ+htWK+7hIZNKluNTzssxVBx+snGIFQXFsRRYJ+YiH/Zos6bVaV7ppFWmvTYKpIm6wfgxh7OOAj2kl7jPrfp7l+xiwPqqH84QHtGqBkuoO7xl3EticCVxrO2YiNa4dWAMbi4QYxUkOLOu0iEcTN5B+OhTYrIofyd2xR27/TQH7VgbRZaEK386VLHgFYKYwm8jfIZc/MA0Jbkc6nC4T8Pncs0ph+CmYkqFqZb7ao55V35Ncr7lxIFxiNhztXpJFBo1bmQ03PmOYgbprxt7VhIegRgTsN52yYWqTxEAupZha1bmjCZUWa1ldEo4lwC4tOT/55NxVpbMzMI4uFG8d4hdXWWgML6QKRoAsWKVhErC9/49DinCIBn548yXSxs4Zt9TCszh2JN+jXk54zTj12Ze/6fIqANOUPBVTjvM3r3yz1+3xoOAc9InAvRg1KeZcy6s5YDYzGw6zmyxTL1bWHhlkf9kJ0j8jmtds0jMZDDSy6pAoRBCNaP2MhXSAW6rDzpY24Gx6BpYg0WwirjeyCRQrKozQg4oZEkJ7Xjq+D8mhcIWGw2kyYGELhBmcEC4byu9iwzbDf0Gg8tDlrKDPv4K7xHhFsOZLpguplHnHhUgh7AWsqI3sDrltMmQVljRq4xv2RAOGAC4o0NqYuPS+ktIaPxsOkC+X1jfMM+wwtpIudZ6zYsENz1Wr7sTRp05CeN3LtF9xsGBYfMzyjaaRI540tUleMCDBu06AMiY3yz5nV0LjRFcBG1LAVeDzcOLSlmTEELsvfAbY9EdiM7MqlEPYG1O3XY23AdQfGhu0ZFtIF9xSpIZGNWQpwvj68ZdhnyFWLND5u9Rta1hresE1DZs5oIy+ki4y5pUhj4yo0odmvZzShPLJ1bRoyc8YegWuKyOCMAGyPwLkilVKSzLgYWombhRbH4htCo5Wy1R5Db/3nS6o9hmtE3AE6IgIhxLAQ4ttCiCPW54aBVSFEpe5Smtvrnh8QQtwjhDgqhPicdZtZV7HgtmsJ2oupYVGNaYwxVXRPkdZy2fWIoEZk6Q3ymxKZa4rUJmI9+YfjDaqLHYRWXFOk8XGQVe049Vg8TLFSZTVXV92a1vcIpJQsZIqMJlz0CAzaNIxarbRrHlm5oJoGGhQjFtwoRrRhmOwxEt+QLJFNAtL8Qqn/AKGhDwDflVIeBL5rfd8IOSnltdbHG+uefxz4hJTyImAJeFeH8hhjMeOiRRpzZlEvbLKozRTpmNvymxJZ/WYw7Jy64EbnSBu2AtGUf1N1ca09hp4iqlYti9QtRWoov53CaB+4U8yoMypN+VMFdT7VcTGWjVq/J/1aAinrirKM7yq2z8dcJOLCKpRyWsNH42FWcqW1Mz7DGgjXUqddQKdE8CbgVuvrW1H3DmvBuqf4FYB9j7HR+92CK316bDi2qDeEhgwU6fwWWtR2SKoWp5bSiMjKlSpLWRc9mlpoS5MINjZuK6yqMxLNjWyfL7gXWrHn34yIa6E5Y0XkYsYcOG4zUTsjs/9uXfndKiazETczhOzfu0ZkhjUcNfmf/WcEE1LKc9bXM8BEk3ERIcRhIcTdQog3W89GgGUppe3XTgG7m/0iIcR7rJ9xeH5e331rh0U3D8uCfSpjRlORxsIB+oL+NUVaa8GrH2NM5ctbFxraWBSUX1Yxet0rNrNFpMTdGDsYt2mopTDWirHMLDrXz2g0M4fWPLLC+veZyu/2+tEtKtvYZsJpMZxbhlzcUl+GyR61+TclArfl7wBtq0iEEN8BdjR46U/qv5FSSiFEs7zDfVLKaSHEBcCd1oX1ejeIrP38TwKfBDh06JBefmMbeHIphGEKozrwsxZSdhEVYzSzKFxTRP6gyqXWlD8S9JOI1BUFGbbHsA/JXVNEfUOqBkDToqs1bqvJb1ukevNfq4FwzaM08wg2Vbca16C4mHoMxm0mRjeeMRkrUpdDQ4ahuU7lt6vyz4fD4rZEIKW8qdlrQohZIcROKeU5IcROoOEMSimnrc/HhRDfB54D/CswKIQIWF7BJDDt4G9wDFerim0YVreOxMJrFqlpw62UyxYdGBdljcXDazFqx4rIJflrjf/05A8HFJGteQTOGoa5RsSRAfCHtOd/sC+I3yfqFJFZaMXVYkQw9ig3nTHZ8ne7T5WNmkc2qzW8FtpK1+1fX1D9HzWQTBcJ+X3Ew1vbZwg6Dw3dDrzT+vqdwFc3DhBCDAkhwtbXo8ALgSekynn7HvDWVu/3EnOragONubWRwbw6Nx5ei/E6bnjmpkcz7rw6OjWjPicaOZCb4dqlIvUwLMoaT4SZS+XVN4Yx9hqRuaWIhDDKXPH5BCOx0Nr6cRhace2MLNyvGv9pKtL+SJCAT6yFRjMLqnlgOK71/mS6SDwcIBJ0oYYGjM/IRhqF5mJj6v+ogflUgbGES8WIHaJTIvgY8CohxBHgJut7hBCHhBB/Z425DDgshHgYpfg/JqV8wnrt/cDvCyGOos4MPt2hPEaYszbQuKtEoN+KGmAsUVedm7I2ULzZUct6uNb5sh6GjedG63OpbUtWV/6UyxY1GM//eCJSp0jnMOnTk0wX8Qk6v2+5Hqa57Im6oibDhmcL6QKD0SBBv0vlREIoEtWU3+cTDMdC69ePYcacq2GVQFj1HNIksljITyToW+/RG8g/ZxHB+YCOfBIpZRJ4ZYPnh4F3W1//BLiqyfuPAzd2IkMnsBXAeL+L/4z4hMonrpTB3356Vb+bAtWqxJc2s6htBeCuR2OWSz0aD/OTY1bee3oGfIG1lsptsJAuEAr4SLjpGsfHYfGY9vCxRJiHp5bVN4Z9ehbSBYZjYXeKEW3ExiF1Vnv4OiI2bHi24MaFTBsR37HmGWpgLBFen/VkUMw3l8q7a8SB2r+aRCaEYCQWXvOI07NGNShzqTz7R2JOpHQd27qyeC6VRwiXLer4BCANUgBDVKWVwpiagUCfcrE1sJAuuOsag3Jt8yuquEcD63KpU7Pq79fs0zNv1UC46hrboTnNfknjiTBzqwVVnWtYTOZqMZyNeAehxbSpIi0w0a/XE0obiQltixrs0Fw9EegT2dxqgfGEy/IbduAdTdSdkaVntY04UPPvqhHaAbY5ERQYjobcc41hbSFoWkWjiboDs/Ss2kiaitGTzoW2/LoHZom6K/vSM9phIVjrfOkq4uNWdWtaa/h4f5icVepfaziniXkvXHs72UCzX9JYQrVpkFIa9+nxzKI28Agm+iPMrtadMW21Io2NGRHZhGVIUK0oTyKuJ3+hXGE5W3KfyBxiexPBqgcb2ZAIbItsLpVX79FcSKCyhlz1ZsBYfruYaiFVVB6BwUae90J+m4gMq3PnVvNKARt4BLOrHljUsXF1Valmv6TReGitzYSBRSql9Eb++A4leymvNXw8ESaZKVAu5lWyhKb82WKZdKHsgUcwYeSRTfRHmE3l1UG3rGjLP+/F+WQH2NZEMJ/KM+7FRgBlHWtgwlrIMysWEST0LWr7Ug5XUSOCc63HWbAtsrlU3lGM1P3QxE71WVd+a/7nVvOWRac3/5WqZD5dYMJti9SeP00irtUSLC2pkJ7997fBak61l3DfELKLsjSJuD+ClLA0N2W9X0+R2hl/7ns0Y1BMafdLGk+EWc6WKK5Y5zqGRHC+HBZvayKYS7nYp8dGfBwQ2ht5TZEWLEWqb1HPrObdV0Q1Raon/w7bo1lOK4tOU/5iucpCulh7v2uw5V/VJQLrEvLFBShltRVpMlOgUpXuE1n/LvVZk8js9bs6d0Y90JR/1kqZ9cQjgLUMuDaYsOZ/Ze60eqAp/5wXiR5QV12sR2T2/K3Mms3/WsZiLzS0pahWJfNexBj9QRWn1VSkkaCfgb4gi8vLqteNpkeQLZZJ5ctMDLi8kPqGVVGMriJKhBECUknbItKT3z5gc5/IzDwa2yLLJZ1apG4TmVlozpY/s3i+WNR2UZauIaTmL7NgKL9FZK7Pv2HjRVt/1OZf06P0jMgcYtsSwVK2SLkqvYnRJXaYHTj1h8kvWYpU06K2D9hct6h9PiW/pkUX9PsYiYUpGsvvkUUaTkAwpq1IB/qChAI+isvWRrYt8jZYk98rj0wvhdRWpIXF6fXvbwNbftdDo4ZEZu+/4rJF3Nrye21ImJ3xFZcs+TWJYH5VZSyeD32GYBsTgaeuWXyHtkUKajFVV81qCGZWPFKkYGV+mMgfplyTX9MiqikilzeyEBaR6ckvhGAsHkaumM2/vX5cn/9gnypq0lRE/RHVuLCyYitSM/ldN4RiY+oSeMPD+urqOdUnSrNP1VwqX7s32FXYhsCqJhHXyx8dgYCeYp9LqXssAm5mLHaA80OKLYCnrlliQtuiBkVGPtuDMHSNPSGChFlR0I7+CL6MWVWxZx4NKKvSQP7x/jCBrE0EZha1J4d9/bu0zziEEOwYiODPnFM1KJp9bmZX88TDAWJu97nx+a0UTL35Vx5lCH/GsAZl1YMaFFDK3B/S9siGoiGCfoEvY3a+N5cqnDcZQ7CdicC2SD0JDe1Uh02aVw5O9IeJ5G1FauoReCS/gUcw3h8hlDNr2DazmifoF+62Z7DRbyb/WDxMJDerLPFgn9Z7ZldVMZmrNSg2EjuMqot39EcIZ+fU323Q58az+HR83MwQ6o8QyZ8nxVhCqPWvScQ+n2A8ESGSmzNOnT5fzgdgOxOBp6GhCXXloGaF4kR/hFGWkL4gRPXaM8ys5omF/CQiLrvGoBa0QS74RH+YRCmJNHCNZ1fzyhNysz2DDduj0a0u7g8TL85rnw+AMiTGvMr4SOwy88gGIsSK89reDNjz7xUR7ND2CEAZY7Fi0kh+T4rhbPTv0g4NgfIKYyX9GghQ8ruesdgBti0RzKcKJMIB+kIutmewYZjLPtEfZlwsU+rT71w4t1pwP2PIhi2/5mbe0R9hTCxT6jOoIVj10CJK7FTVxXm9Ky/GExGGq0mqBq79bMqD1F0bdrJBpdx+LMqQGKouIg1DE56EFcFqM6HfOG88EWaokjT2CDyTv3+XmUeWCDJQWdKWv1KVLKSLPY/gfMBcKs+YlxsZtN3j8f4IYyyTD+u3B5hZzdeK0VyHfeBrkDkxIZbIGcg/u5r35nwAjFNIdwxEmBDLZCOGVcVezX//TiOPckcixDhL5CP6l9Z76hEkdhoR2a64j0FSVDXPl/Iluz2Dh/KvntX2KA9ECwSoaId17RqU86WGALYxEZxdzrN7UC8ebIxavx4zRboaNFSkXnsE2h5NhF1igZWQaTHc+SH/rkSIMZZZ8eu1ny5Xqix4UVVswzCFdDJaJioKLAf01s9qvkyhXPVu/gcmFZFpzv/e8CoA6ZCe/PNeF2P174JyHnJLWsP3hVMAFKN6hsS5ZRVy3eWV/nGAbUwEOXYNePSPiE8AQvvAaSwWYrdYYN6nt5CklCo05Lki1awO7asyJlZZ8OvJbxfDeRcaMssF3xNOExBV5oXe+Uwyo+5adj0H34ZhdffuwDIAC5ryz3mZ8QSKCABWprSG7w4oIkgKPSI+u5wDYOegh0QA+oaETxHGkk9v/m35d3klvwNsSyIolCvMpQreMbI/qMhAcyOEyqvERZ6zQs8iWswUKVaq3lmkfUNGKXTDFXWj2bTU28h2Vat3oS0zj2CHUBt5ujKkNd6zYjgbhrnsEyj5z1UHtcZP1xSRR+t/YI/6rLn+d1nzf7ai137dlt87j95s/nei1v859Pav5/I7QEdJxEKIYeBzwH7gJPALUsqlDWNeDnyi7tGlwNuklF8RQvwD8FLWLrL/NSnlQ53IpIPZFaWIPGXkwT2wclpvrLVhTpb0LApPc/BBHVgPTGpvZLGqqlpPl80UqWehLbsoS9MjC1upryeLeorItug8m//YmCqu0vQIBi0iPlM6TxRp/271eVVv/YxW1FnIseIwL9QYf7aOyEqlElNTU+TzehluWqhG4TWfh+wgPPlk++E7buSJ13yBSrnCkxrjr4iW+PSbdnLu1DH0k5zNEIlEmJycJBjUyyrstJrkA8B3pZQfE0J8wPr+/fUDpJTfA66FGnEcBf69bsh/lVJ+sUM5jNAVRh7YA2cf1Bu7rBpWPZ3VLwYCvMsaAiX/shmRPZPXk//sipp/zyxqMCIy2/M5ktW7K3dqScm/Z9ij9ePzG1V3+ywiPqo5/9NLOQI+4d38h+PKq9Sc/77sFGnZx4m0njqaXs4xGg8RCfo5ceI0iUSC/fv3u1dcJqtwrqxCjBoprXLxJMVcnJXEQa1w4alkhnypyiU7Em5Iu1keKUkmk0xNTXHgwAGt93QaGnoTcKv19a3Am9uMfyvwDSmlXo9Xj3DWa9cYlEewOq13wYi1YR5KxdUFI21gK1LPLFKAwb3GRPBoSlORLir5J4e8nP99+vIvn6FMgKdTevM5tZQjHg64396gHgO7DeQ/xaJvmKm0XpbL9HKOnYMR/F7UcNgw8SiXzzDnH2d6Wc+qn1rK1Yy4fD7PyMiIuxXGwqeuXK2U9IZXipRFkGJF7zKhYqVKKOBdVF4IwcjIiJGX1Kk0E1JK22yZAdrlf70N+JcNzz4qhHhECPEJIUTToLcQ4j1CiMNCiMPz8/oXRzRCzbX32qKuFPWaz62cpuwLcaYYYznbfvGdWcwR8vu8tagH9ynZdYrKVs6QDo5waqVCWWMznFnKMp4Iu3vF5kYM7oXlU3opgMunWAnvYGqlqPWjp5ZyTA71ud/eoB6D+5T8Olg6xVJwB+dWzBWpZxjYo++RrZxhJbyzZuC0w9nl3DojzpP/gz+oTQRUilREQF3XqoFSWRL0e7h2MJ+TtkQghPiOEOKxBh9vqh8nlSnbdNcJIXaiLrH/Vt3jP0KdGdwADLMhrLTh539SSnlISnlobEz/OsFGOLuSYzTeBUUEelbdyhSF6C4kvlrYoRXOLGXZPdTnrUU3aHDgtzJFPrqLSlVqKSNbkXqKwb3qukqdFMClU+Sik6QKZVbz7Tf/1FLWe/mH9sHKtF4u/vJpcrHdTC/ltDzK6aUcuwejLgjZAgOTsHKm/TgpYfk0+aiSv/1wyfRyF4jMH1KGXFuBqlAtUfWFKFXaz321KilXq960JukAbaWRUt4kpbyywcdXgVlLwduKvlU54S8AX5ZS1naalPKcVCgAfw/c2Nmfo4fp5Ty7vU7dqmVOaGyGlSmklXI3tdQ+anZmsQuKqEZkGlbpylQtZfCMjvxLWfYMe6yIhvapz0sn249dPkVlQP29trfYDFJKS5F6Pf/71NWH7Q5cK2VYnaY6sI9cqbJ2kXoTFMtVZlN5dnu9fvp3q8ru/GrrcfllKKxSHdjDUrZEttia+JayJfKlqvc5+P4wlAvtPUrba/CrK0PbEXHJ8phDDYjgb/7mb/jMZz7jSNxO0Skt3Q680/r6ncBXW4x9OxvCQnUkIlDnC491KI8WNrqWnsC2qHU8guUzhIaV4tLyCBa7oEhtImhHZFLCyhShYTXejv83Q7lS5dxyvotE1mb+C2nIJgmM7AfWin2aYTVXJlUoMznULSJrQ8Spc1AtExrdD6i10QozK3mk9Ph8BtZqCayD7KawEiWC1vy38wrs1z0nskAIkFBt4yFaXoMIhJBSUq7qEUEjj+C9730vv/qrv+pI3E7RadbQx4DPCyHeBZxCWf0IIQ4B75VSvtv6fj+wB/jBhvd/VggxBgjgIeC9HcrTFlJKzi7neOnFnYWX2iKcUCmM7RRpuQDpGUIje+mPBNpa1Kl8iaVsib1eE0Fipzowa6dIc0tQzhEb34dPtPcIZlbzlKuSPV4rUl0isDye2MSFwFpGWTPYf5/3oaH96nM7j8x6vX/nhYDkVDLL9fuapyFPLVvyd+OMAFR4a/yy5uOs/0984gCQYWo5x8GJ5tk005b8jTyyj/zb4zxxto0HootqBco5Lt/zBB9687VNh33wwx9hOALv/oOPACX++I//hMldO3jf+97XcHzRCh995IN/zNe/9jUCgQCvfvWr+Yu/+As+/OEPE4/H+YM/+ANe9rKX8dznPpfvfe97LC8v8+lPf5oXv/jFfOITn+DRRx/llltu4dFHH+Xtb3879957L9FoZ/upIyKQUiaBVzZ4fhh4d933J4HdDca9opPf7wQruRLZYqU75d2De2oWT1PYFtPAJJND0bYewRnL4vZckfr8yr1vp0gtovMP7mHnQF9bi9T++zy3qCMDiojbKVLL4k7svIiAb64tEXRN/v5JVUvQziOw/j8jkwcR4hlOa86/5xZ1rbq4zfq35B+evAh4uL1HYHlsnofm7MNW2bqV/H9+xy/wlne8k/f+0ceoVgt88Quf4/vf+x7XXnttw/F/+cm/h74Bbv/qV3nqqacQQrC8vNxwbLlc5t577+WOO+7gIx/5CN/5znd43/vex8te9jK+/OUv89GPfpS//du/7ZgEoHOP4FkHeyPs8jJjyMbAXlg81nqMfRg7sIfJoT5OJjMth9sWqWc57PUY3NueyGxFNbiHyaG8BpF1W349j8A/vJ9dg6m28ttE4blH4A9YKaQ6RCAID+9lZ//ptkQwvZRDCNjpVXsVG4kd6u7rdvKvnIFgjLGxXQR8j7Ql4umlHNGQn8Ho5tTdD/3sFZ1IvB6yCucebttIbv/kBCPDgzz26CPc98Rxrrz6Gvbt28dDDz3UcPyZxSzLmTyRSIR3vetdvOENb+ANb3hDw7FvectbALj++us5efIkAD6fj3/4h3/g6quv5jd+4zd44Qt1SvDa4/w6uu4CbEW7byTm/S+zPYJWB0jrFKnyCFodONUUqdcWKegp0sXj6vPwBewZjrYNDZ3pliICPfmXTqk7jqMj7B+NcaoNEU8tZZsqItcxuE/PI0jshECYPcNRTifbEMFyjolExNM8dkB5lEP71tZHMyyfhsE9+P0+dg5G2noEU0tZdg16nLoLqpbAH4JK68N3KkXe/cu/yD9+5la++oV/5uff8SukUimuvfbahh+PP/4E0XCIe++9l7e+9a187Wtf47WvfW3DHx0Oq2x6v99Pubx2iH7kyBHi8Thnz+q3ym6HbecRnLI2yv7RLijSof1QykBmAeJNziSSR5XlNLCXyaEzZIsVlrIlhptcaj21lCMRDnRJEe1Vh5HlAgSalHgsHlf3zEYG2DMUZXa1QL5UaZqaO7WUZWd/FxQRKEV67E5FxM0Ux/IppbCEYP9IlC+fXkJK2VTRdKWGwMbQPjjy7dZjlk7VzkP2Dkf5wTOta2y6knFmY/hCDSJYk3/fcIxTbTyak8kMB0a7YMSBIoJyeyK4+Y2v54N/8bNk80Ve8Kl/IJFINPUInji3SjmfZQV4/etfzwtf+EIuuOACbZFWVlb4nd/5He666y5++7d/my9+8Yu89a1v1f+bmmDbeQQnFjKMJ8JEQ13gwJGL1Ofk0eZjFo8pwvAHaplArdz704tZJoejXVJE+wHZ2ipdPA7DaiHb4Z5W7v3UYs77+LqNoX1Qyrbu6790ShEGyktM5csti/pOJ7Pd8cYABveror5iC+W4fLqWYbRvJMpcqkCu2DyufXyhi4p0+AJIHm/uEUsJiydqB+MHRmOcmE839YirVcnJZLZ78gfCrWsJqlWoFAlFE7z85S/nDW9+C+UWzn+lKilXqhTzGd7whjdw9dVX86IXvYj//t//u7ZIv/d7v8dv/dZvcfHFF/PpT3+aD3zgA8zN6V8C1Azb0CPIsL9bC6meCPY9v/GY5HEYURkrBywv5cRCmmv3DDYcfmaxixth9KD6vPAMjF3ceMzicdj/YoBaJtPpZJYLxxq3mziZzPDigx5nbNmwCIrkMXWP7kZIqeoMDij5949EazIONfDIKlXJiWSGl17SJfntFNLlU40zb0o5FWMf/iWAmiFxZinLxQ0yb1L5EvOpAhc0+d+4juELlEecnlu77GidQDOq6G9Ura0DozFW82UWM0VGGlzjeHYlR7Fc7a5HUC2rDCJfAw/XChtVfSHuvvtu/r9b/olSuUpVSnwNDLViWRH03snd3HvvvZte//CHP1z7+vvf/37t69HR0doZwS233FJ7vmfPHo4ebWFkGmAbegTZ2ob3HIN7VdgneaTx69WqUqQWYewbiRHwCY7NNY5TlytVTi1mu0hkFhE0k7+YVVlPFpHZCubYfLrh8JVciblUgYvGu6SILAXDwtONX189qxSVNf/2vB6fbzz/00tKEV041mVDYqHJ/CePArL2d9pEfKrJOcGJBfV3dU2RjthE3ERZLTyjPlsGxwFrXm05N8J+vr8b53uwFg5tdk5QLvDEM8e56MpDvPKVr+SySy9GQtNWEwXreVfCoobYVh7BcrbIQrqLisjnt9zjJplDq9Pqbl3Lcg36fewdiXJ0rrEiPb2YpViucrBb8kf6VdZEM0VkK1hLEQ3HQozEQk3lt593bf4H9kCgr738Y5cCSpEG/YIjTeS3Ca6Zt+M62hHZvC3/JcCagj8+n6ZR2y+b4LpGZKNKLuafgv0NsltsA8MyOC6oI+JD+zfXQnSdyPwWEZQLEGxgPJbzXH7xBRw/dhR8/lpVdKFcbXhGZhNBOOBhaxuHOP+oyUM8M6s2ciO32TOMHlQboRHmnlCfxy+vPbpwLN7UorYVVKuCG9cxenDNctuIOevvqgtbXDgeb65Iu00EPh+MXrSmMDdifj0RBP0+LhiNc2Q21XB414kgHFcpyM3kX3hGZbcMK49sMBpiPBGurfONODafxu8T7O2WRzwwCaFE8/W/cFRlbFkX8ewe7CMc8HFkrvH8PzWToj8S8O5Cpo0IWCnmzRovlvPK47fCRraCL5Qan9HkSxVCAR8+L3uEOcS2IoKnrQ3eVSKYuFKFfxod+NWIYE2RXjQe52Qy09C97LpFDUpJzj3VuJ32/JMqjjq8lvVwcDzO0bnGB35H59OE/D72dCtrBZRV3ZQInoK+YYit3Sx1cCLOM00U0TOzKUZioYbnB55h7JLminT+aXXQHVyriblkR4KnZxtX1z55bpULRmPds0iFgPFLYa7JZS1zj6u/z4qnB/w+Lp5I8NRM4/l/eibFpTv6u5MoAcqQ8IeV194IpZy6BMmC3ycI+X3kS41DQ/lSlch56A3ANiOCZ2ZSJMIBdnajmMzGxBWqOGW+wWaYfUJVkPYN1h5dtrOfUkU2tIqenkmxayBCPNzFiN6Oq6CYguWTm1+be1K59f61VNaLJxKs5ErMrG62op48t8pF43EC3ey8OHGluimuURfS2ScU0dUplosnEpxZzDVsfvb42VUu36V3C5hrGLsE5p9p3BJ55lHYceW6R5dMJDgym6bSoOfNk+dSXLqz2/I3IQIplfw7r173+NIdCZ48t3ntSyl5Zibl2WUuTRGMNPYIZNUKGa03aiJBP7kGHkFVSorlKpHg+alyz0+pPMLxhTQX70h0z6KAtY06+/jm1+ae2JQNcoWlaB5v0DPlsekVrtitdwuVa9hxlfo88+jm12YeVURXhyt3K/kfnVpZ91xKyWPTK1zVbfl3XqM+b5S/UlbPdl277vFllqLc2LOmWK5yZDbdfSLYea06rNzoFeRXVeqx/fdZuHhHgkK5uqlCfTVfYno5x2U7u6xIJ66E7MLm+39XpxU5T6wnskt39rOQLrCwoYvq9HKOVKHcfSII9Kn5r25Q7uUCINfCRxYiIT/FcoXqBiIulCpIpLet7zvAtiKCW//Tjfztr1zf3V86uF/FSc89vP55MaOIYIMiOjASIxbyb1JEq/kSxxcyXDPZZUU6fpnqeXPukfXPV8+qYrPd6+fz8p0D+IQirXqcXcmzlC1xZbfltxXlxvlfeFq5/Lues+6xPb8PbyCyY/NpipUql3fborblO/vQ+uezVqPendeue3zN5CAAD59ZXvfcXk+X7eiy/Pb6mH5g/XObmHes9wjs+X10w/p5xPp/XNFtIg5Z5ymlDeGhkhXq3eAR/I+Pf5R/+Jv/Rb68njiyVm1HX8jPbbfdxkc/+tFNv2r//v0sLCy4I7chthURBPw+RhvkJ3sKnw8mr4fT96x/Pv2Aci8nb9wwXHD5rn4e2rCRbcV6lbXRu4ZgnzrMnrpv/fPp+9XnDUTQF/JzcDyxaSPbHsKV3d7IsVEVftuoiOz7pDcQwXh/hB39kU2K9MHT6vuuezTDF0C4f/P91/b3GxTpReNx4uFATV4b959SobFm9SmeYcdVqoutvV5snLlXPd8Q2rp6cgC/T/DAqfWhvAdOLREK+LhiV5fn384WKm1IaS1mlIG0wSOw20tnC5uJIODzEfL7+MY3vtG0rcRWYVulj24Z9jwP7vpz5c5HLEVoK9bJQ5uG37B/mE/edZxMoUzMOg944NQSQsDV3VZEAPteAA/+o4pT2+cBU/dZG/mqTcOfs3eQrz96jkpV1m5Ru+dEkkjQ1/3QCsDe58HJH65vNXH6p6pDqZVxU49r9gzwwOn1iujeE0lG4+HupS7a8Plg93Vw+u71z0/+CIYObCrU8vtEQ/kPn1zk4Hi8uwfdoGLsE1dsNiRO/UR5M6H18xkLB7hsZ6JGXDYeOL3EVbsHWufgf+MDjUOYnWDHVXDdryjFX49iRskuBB/96Ee59dZbGR8fZ8+ePey64FJe9sLn8tgjDwGqN9Cb3/LzfP17PwbgoYce4rrrriOZTPL2t7+d6elpnv/859cSLO677z7e9a53ce+991KpVLjxxhv53Oc+x5VXridNN7GtPIItw97nKuv/TJ1XcOIuldES3Zwv/fwLRyhXJYfrNsNdRxa4Yld/9zcyqKroUnZ9eOXYnbDnuesyVmy88KJRUvnyOq/gp8eS3LB/eGtyqA+8WLVqsOsJpIRj34cDL1GKdgNecOEoU0s5Tlp561JK7jmxyHMvGO7u+ZKNAy9VGTYp6/7ragVO/rhWEb0Rh/YN8+S5VRYzqj1CuVLl8Kmlhrn5XcH+F6u1X7DSWks5OPuAMjAa4Pq9Qzx4epmCFV5JF9RaOrRvqFsSr0cormS3M+EqZZU6Gopx//33c9ttt/HQQw9xxx13cN9999EXDhKN9/Pgg8pr+7tP38LP/sI7iIb9PPjgg1xzzTUIIfjIRz7Ci170Ih5//HFuvvlmTp9WDRJvuOEG3vjGN/Lf/tt/4w//8A/55V/+ZU9JAHoeQXew9/kqX/rpO+Dgq5RncPJH8LzG9/Bcv2+IoF/wg6fneenFY6QLZR44tcSvv0S/OZWr2P9ila/+zLeUB5OaUZbXKz/YcPgLLhwB4IfPzHPtnkHmVvM8NZPiZ6/Z1U2p13DgJerzsTtVq4zkMXUF5It/r+Fw+9KiHzwzz/7RGE/Ppji3kuf5F4x0S+L1uPDl8N2PwPHvwTVvU2GWwgrsf0nD4a+4dJz/+d0j/OCZOW5+ziT3nlgklS/zkoOjDcd7jotugp/+v8oru+R1cPz7qofPgZc2HP6yS8e59aen+MnRJC+/dJy7npmnVJG84tIGbULq8bqPuS87qEPt3KLyAsJxNfcA4X5++MPbuPnmm2t3ArzxjW8kFPBx89t/mU99+hb+1//8H3z+85/j1q9+h/5IkG9+85u87nWvA+Cuu+7iS1/6EgA/8zM/w9DQGtF98IMf5IYbbiASifCXf/mX3vxddejIIxBC/LwQ4nEhRNW6lazZuNcKIZ4WQhwVQnyg7vkBIcQ91vPPCSG2wNztAoJ9igCe/JqyJp75proC75LXNxweDQV4+SXj3P7wWcqVKnc8co5yVWMjeIXYqFKmj31RWUWPf0U9P/iahsNH4mGu3zfElx+aRkrJlx9Ul++89srWvd09w/AFysV/5Db1/SO3AaKp/PtHY1wwGuP2h1Wmy+0PncXvE1sn/45rILELHvm8+v7h21Rs+uJXNxx+1e4BxhJhvv7IDABff/QcfUE/L7tki9bPvheohInHlNLjsX+FviG4oDERvODCEeLhAN947BwA33hshqFokOu3yiMI9wNC3a8MkFtW9TPBxvUwkaCfV73+TXzzm9/ka1/7GpdfdS3jo6OEAz7+/d//nVe/uvH/rR7JZJJ0Ok0qlSKfb319qhvoNDT0GPAW4K5mA4QQfuCvgNcBlwNvF0LYpbQfBz4hpbwIWALe1aE85y+ueRtk5uCBW+HH/1P1kdnz3KbD33LdJAvpAl+4f4pbfnyCiyfiW+caA1z1C6ow7tEvwj1/rQ65dzR3V992wx6Oz2f4t0fO8U/3nOLQvqHuVeQ2wjXvUAesT30dHvgMHHz12r3SDfBLz9vH/aeW+PYTs3zuvjO8+OBo9xMNbPh8cP074dh34ch31P/g0jeoM46GwwW/eGgP331qlruemedLD0zz2it30BfaotTFQBie88vw+JeUV/bE7XDFzevqT+oRDvj52Wt28pUHz/LDI/Pc8eg5bn7OZHfrT+rh86tan2xSefOFVUVkQvCSl7yEr3zlK+RyOVKpFP/2b/+GTwjGBuM8/yUv573v/U1+5q1vZzgeYnV1lXK5zMiI8ixf8pKX8M///M8AfOMb32BpaS0U/Bu/8Rv82Z/9Gb/0S7/E+9//fu//xE7eLKV8UkrZpGyzhhuBo1LK41LKInAb8CbrwvpXAF+0xt2KusD+PyYufq1S/F//fZX697I/atzR0MKrLp/g0L4h/uhLj/LUTIrfvenirYlP27j6F2HiKvjSu1XHzpf+YcvhP3vNLi6eiPM7//IgU0s5fv/VTbqXdgvX/ao6XL3tHZBdhJf8QcvhP39okl0DEX79M4dZzpX4w9dc2iVBm+DQuyA+AZ/9ORVWeWlr5fCfXrifRDjAr95yL5Wq5Pdu2uL5f95vqgycf7xZEUMb+f/LKw7i88GvfPpeIgEf733ZFoVFbcR3WG2zj6lsIaub7XXXXccv/uIvcs011/C6172OG264AYCJ/give/MvUEXw4pfdxHA0xLe//W1uuumm2o/80Ic+xF133cUVV1zBl770JfbuVfcyfOYznyEYDPKOd7yDD3zgA9x3333ceeed3v59UsqOP4DvA4eavPZW4O/qvv8V4P8FRlEEYT/fAzzW4ne8BzgMHN67d698ViK9IOW//x9SPvIFreGzqzn5F996Sn7t4bMeC6aJ5TNS/vsHpXz8K1rDp5ey8s+/+aT898dnPBZMEwtHlfxHv6s1/ORCWn7sG0/KHz4z77Fgmph9Usl/4kdaw4/Mrso/+fIj8oFTix4LponpB6T8+n+Vcup+reGPTi3LP/7SI/LJcytNxzzxxBNuSdcehbSUS6elLOa0hn/0//q4fN8fvF/mi2UppZTvete75E9/+lMvJVyHRnMDHJYN9KuQra5RBIQQ3wEaBUf/REr5VWvM94E/kOrS+o3vfyvwWinlu63vfwV4LvBh4G6pwkIIIfYA35BStj0eP3TokDx8eNOv6qGHHrYZnnzySS67rMFdDVuMm2++mWPHjnHnnXcyOro1h/SN5kYIcb+UctN5btusISnlTe3GtME0ytq3MWk9SwKDQoiAlLJc97yHHnro4VmNL3/5y1stghG6cfpyH3DQyhAKAW8DbrfclO+hQkcA7wS+2gV5euihh/9AaBfV2I4wnZNO00dvFkJMAc8Hvi6E+Jb1fJcQ4g5LoDLw28C3gCeBz0sp7Q5s7wd+XwhxFBgBPt2JPD300MP2QiQSIZlM9sigDlJKkskkkYh+l+W2ZwTnI3pnBD300ANAqVRiamqqK7n2zyZEIhEmJycJBten6Do+I+ihhx56OF8RDAY5cODAVovxrEev11APPfTQwzZHjwh66KGHHrY5ekTQQw899LDN8aw8LBZCzAOnHL59FNiaa4BaoyeXGc5XueD8la0nlxn+I8q1T0o5tvHhs5IIOoEQ4nCjU/OtRk8uM5yvcsH5K1tPLjNsJ7l6oaEeeuihh22OHhH00EMPPWxzbEci+ORWC9AEPbnMcL7KBeevbD25zLBt5Np2ZwQ99NBDDz2sx3b0CHrooYceeqhDjwh66KGHHrY5tg0RCCH+byHEU0KIR4QQXxZCDNa99kdCiKNCiKeFEI1vNPdOrp8XQjwuhKgKIQ7VPd8vhMgJIR6yPv7mfJDLem3L5muDHB8WQkzXzdHrt0oWS57XWnNyVAjxga2UpR5CiJNCiEetOdrSbo1CiFuEEHNCiMfqng0LIb4thDhife765dxN5Nry9SWE2COE+J4Q4glrP77Peu7unDW6tuw/4gfwaiBgff1x4OPW15cDDwNh4ABwDPB3Ua7LgEvYcN0nsJ8WV3duoVxbOl8bZPww6ma882F9+a25uAAIWXN0+VbLZcl2EhjdajksWV4CXFe/toE/Bz5gff0Be2+eB3Jt+foCdgLXWV8ngGesPejqnG0bj0BK+e9S3Y0AcDfqRjSANwG3SSkLUsoTwFHgxi7K9aSU8ulu/T5dtJBrS+frPMaNqDu4j0spi8BtqLnqoQ5SyruAxQ2P3wTcan19K/DmbsoETeXackgpz0kpH7C+TqHudNmNy3O2bYhgA/4z8A3r693AmbrXpqxn5wMOCCEeFEL8QAjx4q0WxsL5Nl+/bYX7btmKkEIdzrd5qYcE/l0Icb8Q4j1bLUwDTEgpz1lfzwATWynMBpwv6wshxH7gOcA9uDxn/6HuIxBCfAfY0eClP5FSftUa8ydAGfjs+SRXA5wD9kopk0KI64GvCCGukFKubrFcXUUrGYG/Bv4Mpej+DPh/UCTfw3q8SEo5LYQYB74thHjKsoDPO0gppRDifMlpP2/WlxAiDvwr8LtSylUhRO01N+bsPxQRSClvavW6EOLXgDcAr5RWcA2YBvbUDZu0nnVNribvKQAF6+v7hRDHgIsB1w77nMhFF+arHroyCiE+BXzNKzk00NV5MYGUctr6PCeE+DIqjHU+EcGsEGKnlPKcEGInMLfVAgFIKWftr7dyfQkhgigS+KyU8kvWY1fnbNuEhoQQrwX+EHijlDJb99LtwNuEEGEhxAHgIHDvVshYDyHEmBDCb319AUqu41srFXAezZe1AWzcDDzWbGwXcB9wUAhxQAgRAt6GmqsthRAiJoRI2F+jkia2cp4a4XbgndbX7wTOF290y9eXUKb/p4EnpZT/ve4ld+dsK0/Eu3z6fhQVw33I+vibutf+BJXx8TTwui7LdTMqnlwAZoFvWc9/DnjckvUB4GfPB7m2er42yPiPwKPAI9bG2LnFa+z1qKyOY6jw2pbJUifTBagMpoet9bSlcgH/ggp7lqz19S5gBPgucAT4DjB8nsi15esLeBEqNPVIne56vdtz1msx0UMPPfSwzbFtQkM99NBDDz00Ro8Ieuihhx62OXpE0EMPPfSwzdEjgh566KGHbY4eEfTQQw89bHP0iKCHHnroYZujRwQ99NBDD9sc/z9SU8Rv30LWngAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "x = torch.arange(-20,20,0.1,requires_grad=True,dtype=torch.float32)\n",
    "y = torch.sin(x)\n",
    "y.sum().backward()\n",
    "plt.plot(x.detach(),y.detach(),label='y=sinx')\n",
    "plt.plot(x.detach(),x.grad,label='dy/dx')\n",
    "plt.legend(loc='lower right')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "067baf6b",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "PyTorch_cpu",
   "language": "python",
   "name": "pytorch_cpu"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
